
import { useState } from "react";
import { User } from "@/types";
import { UseFormReturn } from "react-hook-form";
import { TripFormData } from "@/components/forms/schemas/tripFormSchema";
import { useAuth } from "@/contexts/AuthContext";

interface UseTripTravelersProps {
  form: UseFormReturn<TripFormData>;
}

export function useTripTravelers({ form }: UseTripTravelersProps) {
  const { currentUser } = useAuth();
  const [isCreatingNewTraveler, setIsCreatingNewTraveler] = useState(false);

  // Handle selecting an existing traveler
  const handleSelectTraveler = (traveler: User) => {
    console.log("Sélection du voyageur:", traveler);

    if (!traveler) {
      console.error("Tentative de sélection d'un voyageur null");
      return;
    }

    // Mise à jour complète des champs
    form.setValue("travelerType", "existing", { shouldValidate: true, shouldDirty: true });
    form.setValue("existingTraveler", {
      id: traveler.id || "",
      name: traveler.name || "",
      email: traveler.email || "",
      role: traveler.role || "traveler",
      id_planner: traveler.id_planner || currentUser?.id || undefined
    }, { shouldValidate: true, shouldDirty: true });
    form.setValue("newTraveler", undefined, { shouldValidate: true });

    // Log pour vérifier que les valeurs ont bien été mises à jour
    console.log("Après sélection du voyageur:", form.getValues());

    setIsCreatingNewTraveler(false);
  };

  // Handle creating a new traveler
  const handleNewTraveler = () => {
    console.log("Création d'un nouveau voyageur");
    setIsCreatingNewTraveler(true);
    form.setValue("travelerType", "new", { shouldValidate: true, shouldDirty: true });
    form.setValue("existingTraveler", undefined, { shouldValidate: true });
    form.setValue("newTraveler", { name: "", email: "" }, { shouldValidate: true, shouldDirty: true });

    // Log pour vérifier que les valeurs ont bien été mises à jour
    console.log("Après configuration pour nouveau voyageur:", form.getValues());
  };

  const handleNoTraveler = () => {
    setIsCreatingNewTraveler(false);
    form.setValue("travelerType", "none", { shouldValidate: true, shouldDirty: true });
    form.setValue("existingTraveler", undefined, { shouldValidate: true });
    form.setValue("newTraveler", undefined, { shouldValidate: true });
  };

  return {
    handleSelectTraveler,
    handleNewTraveler,
    handleNoTraveler,
    isCreatingNewTraveler,
    setIsCreatingNewTraveler
  };
}
