import { Head, Link, useForm } from '@inertiajs/react';
import type { FormEvent } from 'react';

type Brand = { id: number; name: string; slug: string; is_active: boolean };

export default function BrandForm({ brand }: { brand: Brand | null }) {
    const { data, setData, post, put, processing, errors } = useForm({
        name: brand?.name ?? '',
        slug: brand?.slug ?? '',
        is_active: brand?.is_active ?? true,
    });

    function submit(event: FormEvent) {
        event.preventDefault();
        brand ? put(`/admin/brands/${brand.id}`) : post('/admin/brands');
    }

    return (
        <>
            <Head title={brand ? 'Edit Brand' : 'Create Brand'} />
            <main className="min-h-screen bg-slate-50 px-4 py-6 text-slate-900 sm:px-6 lg:px-8">
                <form onSubmit={submit} className="mx-auto max-w-3xl rounded-lg border border-slate-200 bg-white p-5">
                    <h1 className="text-2xl font-semibold">{brand ? 'Edit brand' : 'Create brand'}</h1>
                    <div className="mt-5 grid gap-4">
                        <Field label="Name" error={errors.name}><input className="input" value={data.name} onChange={(event) => setData('name', event.target.value)} /></Field>
                        <Field label="Slug" error={errors.slug}><input className="input" value={data.slug} onChange={(event) => setData('slug', event.target.value)} /></Field>
                        <label className="flex items-center gap-2 text-sm font-medium"><input type="checkbox" checked={data.is_active} onChange={(event) => setData('is_active', event.target.checked)} /> Active</label>
                    </div>
                    <Actions processing={processing} back="/admin/brands" />
                </form>
            </main>
        </>
    );
}

function Field({ label, error, children }: { label: string; error?: string; children: React.ReactNode }) {
    return <label className="grid gap-1 text-sm font-medium text-slate-700"><span>{label}</span>{children}{error ? <span className="text-xs text-red-600">{error}</span> : null}</label>;
}

function Actions({ processing, back }: { processing: boolean; back: string }) {
    return <div className="mt-6 flex justify-end gap-2"><Link href={back} className="rounded-md border border-slate-300 px-4 py-2 text-sm font-semibold">Cancel</Link><button disabled={processing} className="rounded-md bg-cyan-700 px-4 py-2 text-sm font-semibold text-white disabled:opacity-60">Save</button></div>;
}
