// 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é → redirection vers le tableau de bord
  if (authService.isAuthenticated()) {
    router.navigate(['/dcb-dashboard'], { replaceUrl: true });
    return false;
  }

  // 🔄 Vérifier si un refresh token est disponible
  const refreshToken = authService.getRefreshToken();
  if (refreshToken) {
    return authService.refreshAccessToken().pipe(
      map(() => {
        // ✅ Rafraîchissement réussi → redirection vers le dashboard
        router.navigate(['/dcb-dashboard'], { replaceUrl: true });
        return false;
      }),
      catchError(() => {
        // ❌ Rafraîchissement échoué → autoriser l’accès à la page publique
        return of(true);
      })
    );
  }

  // 👤 Aucun token → accès autorisé à la page publique
  return true;
};
