
import { Form } from "@/components/ui/form";
import { Trip } from "@/types";
import { useTripFormLogic } from "@/hooks/useTripFormLogic";
import { TravelerSelect } from "./TravelerSelect";
import { DateRangePicker } from "./DateRangePicker";
import { CoverImageUpload } from "./CoverImageUpload";
import { BasicTripInfoSection } from "./sections/BasicTripInfoSection";
import { FormSubmitButton } from "./FormSubmitButton";

interface TripFormProps {
  initialTrip?: Trip;
  onSuccess?: (tripId: string) => void;
  submitLabel?: string;
}

export function TripForm({ initialTrip, onSuccess, submitLabel = "Enregistrer" }: TripFormProps) {
  const {
    form,
    isSubmitting,
    isEditMode,
    tripDuration,
    formatTripDuration,
    travelers,
    searchTerm,
    setSearchTerm,
    handleSelectTraveler,
    handleNewTraveler,
    handleNoTraveler,
    onSubmit
  } = useTripFormLogic({ initialTrip, onSuccess });

  return (
    <Form {...form}>
      <form onSubmit={onSubmit} className="space-y-8">
        {!initialTrip && (
          <aside className="rounded-xl border border-primary/20 bg-accent/40 p-4 text-sm text-muted-foreground">
            <p className="font-semibold text-foreground">Commencez par les informations essentielles.</p>
            <p className="mt-1">Donnez un nom au voyage, indiquez sa destination et ses dates. Vous pouvez le créer sans voyageur et inviter les participants plus tard.</p>
          </aside>
        )}
        <CoverImageUpload
          control={form.control}
          initialCoverUrl={initialTrip?.coverUrl}
          note="Cette image sera utilisée comme couverture et bannière du voyage"
        />

        <BasicTripInfoSection form={form} />

        <DateRangePicker
          control={form.control}
          tripDuration={tripDuration}
          formatTripDuration={formatTripDuration}
        />

        <TravelerSelect
          control={form.control}
          isEditMode={isEditMode}
          travelers={travelers}
          searchTerm={searchTerm}
          setSearchTerm={setSearchTerm}
          handleSelectTraveler={handleSelectTraveler}
          handleNewTraveler={handleNewTraveler}
          handleNoTraveler={handleNoTraveler}
        />

        <FormSubmitButton
          isSubmitting={isSubmitting}
          isEditMode={isEditMode}
          label={submitLabel}
        />
      </form>
    </Form>
  );
}
