
import { User } from "@/types";
import { UseFormSetValue, Control } from "react-hook-form";
import { TripFormData } from "@/components/forms/schemas/tripFormSchema";

interface UseTripFormHelperProps {
  control: Control<TripFormData>;
  setValue: UseFormSetValue<TripFormData>;
}

export function useTripFormHelper({ setValue }: UseTripFormHelperProps) {
  // Gérer la sélection d'un voyageur existant
  const handleSelectTraveler = (traveler: User) => {
    console.log("Helper - Sélection d'un voyageur existant:", traveler);

    // S'assurer que toutes les données nécessaires sont disponibles
    if (!traveler) {
      console.error("Aucun voyageur fourni pour la sélection");
      return;
    }

    // Définir le type de voyageur comme "existant"
    setValue("travelerType", "existing", { shouldValidate: true, shouldDirty: true });

    // Enregistrer les détails du voyageur sélectionné
    setValue("existingTraveler", {
      id: traveler.id || "",
      name: traveler.name || "",
      email: traveler.email || "",
      role: traveler.role || "traveler",
      id_planner: traveler.id_planner
    }, { shouldValidate: true, shouldDirty: true });

    // Effacer les données du nouveau voyageur
    setValue("newTraveler", undefined, { shouldValidate: true });

    console.log("Voyageur existant sélectionné avec succès");
  };

  // Gérer la création d'un nouveau voyageur
  const handleNewTraveler = () => {
    console.log("Helper - Création d'un nouveau voyageur");

    // Définir le type de voyageur comme "nouveau"
    setValue("travelerType", "new", { shouldValidate: true, shouldDirty: true });

    // Initialiser un nouvel objet voyageur vide
    setValue("newTraveler", { name: "", email: "" }, { shouldValidate: true, shouldDirty: true });

    // Effacer les données du voyageur existant
    setValue("existingTraveler", undefined, { shouldValidate: true });

    console.log("Configuration pour nouveau voyageur terminée");
  };

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

  return {
    handleSelectTraveler,
    handleNewTraveler,
    handleNoTraveler
  };
}
