// src/app/core/guards/public.guard.ts
import { inject } from '@angular/core';
import { CanActivateFn, Router } from '@angular/router';
import { AuthService } from '../services/auth.service';
import { map, catchError, of } from 'rxjs';

export const publicGuard: CanActivateFn = () => {
  const authService = inject(AuthService);
  const router = inject(Router);

  // Si l'utilisateur est déjà authentifié, le rediriger vers le dashboard
  if (authService.isAuthenticated()) {
    console.log('🔄 Utilisateur déjà authentifié, redirection vers le dashboard');
    router.navigate(['/dcb-dashboard'], { replaceUrl: true });
    return false;
  }

  // Vérifier si un refresh token est disponible
  const refreshToken = authService.getRefreshToken();
  if (refreshToken) {
    console.log('🔄 Token de rafraîchissement détecté, tentative de reconnexion...');
    
    return authService.refreshToken().pipe(
      map(() => {
        console.log('✅ Reconnexion automatique réussie');
        router.navigate(['/dcb-dashboard'], { replaceUrl: true });
        return false;
      }),
      catchError((error) => {
        console.error('❌ Échec de la reconnexion automatique:', error);
        // En cas d'erreur, autoriser l'accès à la page publique
        return of(true);
      })
    );
  }

  // L'utilisateur n'est pas connecté, autoriser l'accès à la page publique
  console.log('🌐 Accès public autorisé');
  return true;
};