"use client";

import { useEffect } from "react";

import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from "@/components/ui/dialog";
import { useCreateClient, useUpdateClient } from "@/hooks/clients/use-clients-queries";
import type { Client } from "@/types/clients";

import { ClientForm } from "./client-form";

interface ClientDialogProps {
  open: boolean;
  onOpenChange: (open: boolean) => void;
  client?: Client | null;
  managers?: Array<{ id: number; name: string }>;
}

interface ClientFormValues {
  first_name: string;
  last_name: string;
  email: string;
  phone_number: string;
  date_of_birth?: string;
  gender?: "M" | "F" | "O";
  nationality?: string;
  address?: string;
  city?: string;
  country?: string;
  postal_code?: string;
  account_manager: number;
  notes?: string;
  referrer_client_number?: string;
}

export function ClientDialog({ open, onOpenChange, client, managers = [] }: ClientDialogProps) {
  const createClientMutation = useCreateClient();
  const updateClientMutation = useUpdateClient();

  const isEditing = !!client;
  const isLoading = createClientMutation.isPending || updateClientMutation.isPending;

  const handleSubmit = async (values: ClientFormValues) => {
    try {
      if (isEditing) {
        // Mettre à jour le client existant
        await updateClientMutation.mutateAsync({
          id: client.id,
          data: values,
        });
      } else {
        // Créer un nouveau client
        await createClientMutation.mutateAsync(values);
      }

      // Fermer le dialogue en cas de succès
      onOpenChange(false);
    } catch (error) {
      // L'erreur est gérée par les hooks (toast)
      console.error("Erreur lors de la soumission:", error);
    }
  };

  const handleCancel = () => {
    onOpenChange(false);
  };

  // Réinitialiser les erreurs quand le dialogue se ferme
  useEffect(() => {
    if (!open) {
      createClientMutation.reset();
      updateClientMutation.reset();
    }
  }, [open, createClientMutation, updateClientMutation]);

  return (
    <Dialog open={open} onOpenChange={onOpenChange}>
      <DialogContent className="max-h-[90vh] max-w-4xl overflow-y-auto">
        <DialogHeader>
          <DialogTitle>{isEditing ? "Modifier le client" : "Nouveau client"}</DialogTitle>
          <DialogDescription>
            {isEditing
              ? "Modifiez les informations du client ci-dessous."
              : "Remplissez les informations ci-dessous pour créer un nouveau client."}
          </DialogDescription>
        </DialogHeader>

        <ClientForm
          client={client}
          onSubmit={handleSubmit}
          onCancel={handleCancel}
          isLoading={isLoading}
          managers={managers}
        />
      </DialogContent>
    </Dialog>
  );
}
