interface FileHandlerProps {
  setUploadedFile: (file: File | null) => void;
  setSourceText: (text: string) => void;
  setFileContent: (content: string) => void;
  setError: (error: string | null) => void;
  setIsLoadingFile?: (loading: boolean) => void; // Ajouter cette propriété
}

export const useFileHandler = ({
  setUploadedFile,
  setSourceText,
  setFileContent,
  setError,
  setIsLoadingFile,
}: FileHandlerProps) => {
  const handleFileChange = async (
    event: React.ChangeEvent<HTMLInputElement>
  ) => {
    const file = event.target.files?.[0];
    if (!file) return;

    setUploadedFile(file);
    setError(null);
    setSourceText("");
    setFileContent("");

    if (file.type === "text/plain") {
      try {
        const text = await file.text();
        setFileContent(text);
        setSourceText(text);
      } catch {
        setError("Erreur lors de la lecture du fichier texte");
        setUploadedFile(null);
      }
    } else if (file.type === "application/pdf") {
      // Activer le loader immédiatement pour les PDF
      setIsLoadingFile?.(true);

      try {
        const formData = new FormData();
        formData.append("file", file);

        const response = await fetch("/api/process-document", {
          method: "POST",
          body: formData,
        });

        if (!response.ok) {
          // ✅ Récupérer le message d'erreur détaillé du serveur
          let errorMessage = `Erreur HTTP: ${response.status}`;
          
          try {
            const responseText = await response.text();
            console.log("🔍 Réponse brute du serveur:", responseText);
            
            try {
              const errorData = JSON.parse(responseText);
              if (errorData.error) {
                errorMessage = errorData.error;
                console.log("✅ Message détaillé récupéré:", errorMessage);
              }
            } catch (jsonError) {
              console.error("❌ Erreur parsing JSON:", jsonError);
              console.error("❌ Réponse non-JSON:", responseText);
              errorMessage = `Erreur ${response.status}: ${responseText || 'Réponse invalide du serveur'}`;
            }
          } catch (readError) {
            console.error("❌ Impossible de lire la réponse:", readError);
          }
          
          throw new Error(errorMessage);
        }

        const data = await response.json();

        if (data.error) {
          throw new Error(data.error);
        }

        const extractedText = data.text || data.anonymizedText || "";

        if (!extractedText || extractedText.trim().length === 0) {
          throw new Error(
            "Le fichier PDF ne contient pas de texte extractible"
          );
        }

        setFileContent(extractedText);
        setSourceText(extractedText);
      } catch (error) {
        console.error("Erreur PDF:", error);
        setError(
          error instanceof Error
            ? error.message
            : "Erreur lors de la lecture du fichier PDF"
        );
        setUploadedFile(null);
        setFileContent("");
        setSourceText("");
      } finally {
        // Désactiver le loader une fois terminé
        setIsLoadingFile?.(false);
      }
    } else {
      setError(
        "Type de fichier non supporté. Veuillez utiliser un fichier TXT ou PDF."
      );
      setUploadedFile(null);
    }
  };

  return { handleFileChange };
};
