import { TriangleAlert } from 'lucide-react';
import {
    Dialog,
    DialogContent,
    DialogDescription,
    DialogHeader,
    DialogTitle,
} from '@/components/ui/dialog';
import {
    LeaveRequestForm,
    type BalanceOption,
    type EmployeeOption,
    type LeaveTypeOption,
} from './leave-request-form';

type Props = {
    open: boolean;
    onOpenChange: (open: boolean) => void;
    employees: EmployeeOption[];
    leaveTypes: LeaveTypeOption[];
    initialBalances?: BalanceOption[];
    defaultEmployeeId?: number | null;
    defaultStartDate?: string | null;
    submitUrl?: string;
};

export function LeaveRequestFormModal({
    open,
    onOpenChange,
    employees,
    leaveTypes,
    initialBalances = [],
    defaultEmployeeId = null,
    defaultStartDate = null,
    submitUrl,
}: Props) {
    return (
        <Dialog open={open} onOpenChange={onOpenChange}>
            <DialogContent className="max-h-[90vh] overflow-y-auto sm:max-w-2xl">
                <DialogHeader>
                    <DialogTitle>Nouvelle demande de congé</DialogTitle>
                    <DialogDescription>
                        Choisissez le type de congé et la période souhaitée
                    </DialogDescription>
                </DialogHeader>

                {employees.length === 0 ? (
                    <div className="flex flex-col items-center gap-3 rounded-lg border border-dashed p-6 text-center">
                        <TriangleAlert className="size-8 text-muted-foreground" />
                        <p className="text-sm font-medium">
                            Aucune fiche employé associée à votre compte
                        </p>
                        <p className="text-sm text-muted-foreground">
                            Contactez un administrateur pour lier votre compte
                            à une fiche employé avant de pouvoir créer une
                            demande de congé.
                        </p>
                    </div>
                ) : (
                    <LeaveRequestForm
                        key={defaultStartDate ?? 'default'}
                        employees={employees}
                        leaveTypes={leaveTypes}
                        initialBalances={initialBalances}
                        defaultEmployeeId={defaultEmployeeId}
                        defaultStartDate={defaultStartDate}
                        submitUrl={submitUrl}
                        onCancel={() => onOpenChange(false)}
                        onSuccess={() => onOpenChange(false)}
                    />
                )}
            </DialogContent>
        </Dialog>
    );
}
