import { Head, useForm } from '@inertiajs/react';
import type { FormEvent } from 'react';
import PayrollRunController from '@/actions/App/Http/Controllers/Admin/PayrollRunController';
import InputError from '@/components/input-error';
import Heading from '@/components/heading';
import { Button } from '@/components/ui/button';
import { Input } from '@/components/ui/input';
import { Label } from '@/components/ui/label';
import { dashboard } from '@/routes';
import { create, index } from '@/routes/admin/payroll-runs';

export default function PayrollRunsCreate({
    defaults,
}: {
    defaults: { year: number; month: number };
}) {
    const form = useForm({
        year: String(defaults.year),
        month: String(defaults.month),
        payment_date: '',
    });

    function submit(event: FormEvent) {
        event.preventDefault();
        form.transform((data) => ({
            year: Number(data.year),
            month: Number(data.month),
            payment_date: data.payment_date || null,
        }));
        form.post(PayrollRunController.store.url());
    }

    return (
        <>
            <Head title="Nouveau cycle de paie" />
            <div className="mx-auto flex w-full max-w-xl flex-1 flex-col gap-6 p-4 md:p-6">
                <Heading
                    title="Nouveau cycle de paie"
                    description="Un seul cycle par mois. Les barèmes IGR, CN, CNPS et parts fiscales doivent déjà être saisis."
                />
                <form onSubmit={submit} className="space-y-4">
                    <div className="space-y-2">
                        <Label htmlFor="year">Année</Label>
                        <Input
                            id="year"
                            type="number"
                            value={form.data.year}
                            onChange={(event) => form.setData('year', event.target.value)}
                        />
                        <InputError message={form.errors.year} />
                    </div>
                    <div className="space-y-2">
                        <Label htmlFor="month">Mois</Label>
                        <Input
                            id="month"
                            type="number"
                            min={1}
                            max={12}
                            value={form.data.month}
                            onChange={(event) => form.setData('month', event.target.value)}
                        />
                        <InputError message={form.errors.month} />
                    </div>
                    <div className="space-y-2">
                        <Label htmlFor="payment_date">Date de paiement (optionnel)</Label>
                        <Input
                            id="payment_date"
                            type="date"
                            value={form.data.payment_date}
                            onChange={(event) => form.setData('payment_date', event.target.value)}
                        />
                        <InputError message={form.errors.payment_date} />
                    </div>
                    <Button type="submit" disabled={form.processing}>
                        Créer le cycle
                    </Button>
                </form>
            </div>
        </>
    );
}

PayrollRunsCreate.layout = {
    breadcrumbs: [
        { title: 'Tableau de bord', href: dashboard() },
        { title: 'Paie', href: index() },
        { title: 'Créer', href: create() },
    ],
};
