
import { useEffect, useState } from "react";
import { useNavigate } from "react-router-dom";
import { supabase } from "@/integrations/supabase/client";
import { toast } from "sonner";
import { AuthLoader } from "./AuthLoader";
import { AuthError } from "./AuthError";

export function AuthCallback() {
  const navigate = useNavigate();
  const [isLoading, setIsLoading] = useState(true);
  const [error, setError] = useState<string | null>(null);

  useEffect(() => {
    const handleCallback = async () => {
      try {
        console.group("🔑 Traitement du callback d'authentification");

        // Récupérer les tokens depuis l'URL
        const hash = window.location.hash;
        console.log("Hash de l'URL:", hash);

        const accessTokenMatch = hash.match(/access_token=([^&]*)/);
        const refreshTokenMatch = hash.match(/refresh_token=([^&]*)/);
        const typeMatch = hash.match(/type=([^&]*)/);

        const accessToken = accessTokenMatch ? accessTokenMatch[1] : null;
        const refreshToken = refreshTokenMatch ? refreshTokenMatch[1] : null;
        const type = typeMatch ? typeMatch[1] : null;

        if (!accessToken || !refreshToken) {
          console.error("⚠️ Tokens manquants dans l'URL");
          setError("Lien d'invitation invalide. Veuillez demander un nouveau lien.");
          setIsLoading(false);
          return;
        }

        console.log("Type d'authentification:", type);
        console.log("Access token trouvé:", accessToken ? "Oui" : "Non");
        console.log("Refresh token trouvé:", refreshToken ? "Oui" : "Non");

        // Définir la session manuellement
        console.log("Définition manuelle de la session avec les tokens...");

        const { data, error } = await supabase.auth.setSession({
          access_token: accessToken,
          refresh_token: refreshToken
        });

        if (error) {
          console.error("❌ Erreur lors de la définition de la session:", error.message);
          setError(`Erreur d'authentification: ${error.message}`);
          setIsLoading(false);
          return;
        }

        console.log("✅ Session définie avec succès:", data.session ? "Valide" : "Invalide");

        // Récupérer l'email de l'utilisateur
        const email = data.user?.email;

        // Nettoyer l'URL pour des raisons de sécurité
        if (window.history.pushState) {
          window.history.pushState({}, document.title, "/auth/callback");
        }

        // Pour une invitation, rediriger vers la page de configuration du mot de passe
        if (type === "invite" || type === "signup") {
          console.log("👉 Redirection vers la page d'inscription pour définir le mot de passe");

          if (email) {
            // Stocker l'information que c'est une invitation valide
            localStorage.setItem("validatedInviteEmail", email);
            navigate(`/signup?type=invite&email=${encodeURIComponent(email)}`, { replace: true });
          } else {
            navigate("/signup", { replace: true });
          }
        } else {
          // Pour d'autres types d'authentification, rediriger vers la page d'accueil
          console.log("👉 Redirection vers la page d'accueil");
          navigate("/", { replace: true });
        }

        toast.success("Authentification réussie !");
        console.groupEnd();
      } catch (err) {
        console.error("❌ Erreur lors du traitement du callback:", err);
        setError("Une erreur est survenue lors du traitement de l'authentification.");
        setIsLoading(false);
      }
    };

    handleCallback();
  }, [navigate]);

  if (error) {
    return <AuthError description={error} />;
  }

  return <AuthLoader message="Authentification en cours..." subMessage="Veuillez patienter..." />;
}
