
import { useState, useEffect } from "react";
import { useForm, UseFormReturn } from "react-hook-form";
import { zodResolver } from "@hookform/resolvers/zod";
import { format, parseISO } from "date-fns";
import { Trip } from "@/types";
import { tripFormSchema, TripFormData } from "@/components/forms/schemas/tripFormSchema";

interface UseTripFormInitProps {
  trip: Trip;
}

export function useTripFormInit({ trip }: UseTripFormInitProps): UseFormReturn<TripFormData> {
  // Determine initial traveler type based on trip data
  const primaryMember = trip.members?.[0];
  const initialTravelerType = primaryMember || trip.travelerId ? "existing" : trip.travelerEmail ? "new" : "none";
  console.log("Type de voyageur initial:", initialTravelerType);
  console.log("Données du voyageur:", {
    id: trip.travelerId,
    email: trip.travelerEmail,
    name: trip.travelerName
  });

  // Initialize form with trip data
  const form = useForm<TripFormData>({
    resolver: zodResolver(tripFormSchema),
    defaultValues: {
      title: trip.title,
      destination: trip.destination,
      startDate: format(parseISO(trip.startDate), "yyyy-MM-dd"),
      endDate: format(parseISO(trip.endDate), "yyyy-MM-dd"),
      travelerType: initialTravelerType,
      existingTraveler: initialTravelerType === "existing" ? {
        id: primaryMember?.userId || trip.travelerId || "",
        name: primaryMember?.name || trip.travelerName || "",
        email: primaryMember?.email || trip.travelerEmail || "",
        role: "traveler",
        id_planner: undefined
      } : undefined,
      newTraveler: initialTravelerType === "new" ? {
        name: trip.travelerName || "",
        email: trip.travelerEmail || "",
      } : undefined,
      coverUrl: trip.coverUrl,
    },
    mode: "onChange",
  });

  // Log for debugging
  useEffect(() => {
    console.log("Valeurs initiales du formulaire:", form.getValues());
    console.log("Voyageur actuel du voyage:", {
      id: trip.travelerId,
      name: trip.travelerName,
      email: trip.travelerEmail
    });
  }, [trip, form]);

  return form;
}
