import React from 'react';
import AppLayout from '@/layouts/app-layout';
import { Head, useForm, usePage, Link } from '@inertiajs/react';
import { BreadcrumbItem } from '@/types';
import { Button } from '@/components/ui/button';
import MultiParentSelector from '@/components/multi-parent-selector';

const breadcrumbsBase: BreadcrumbItem[] = [
    { title: 'School Management', href: '/admin/school' },
    { title: 'Students', href: '/admin/school/students' },
];

export default function StudentsEdit() {
    const { props } = usePage();
    const pageProps: any = props;
    const item = pageProps.item ?? {};

    const breadcrumbs: BreadcrumbItem[] = [...breadcrumbsBase, { title: `${item.first_name} ${item.last_name}`, href: `/admin/school/students/${item.id}/edit` }];

    const form = useForm({
        first_name: item.first_name ?? '',
        middle_name: item.middle_name ?? '',
        last_name: item.last_name ?? '',
        gender: item.gender ?? '',
        hebrew_name: item.hebrew_name ?? '',
        pronouns: item.pronouns ?? '',
        preferred_name: item.preferred_name ?? '',
        allergies: item.allergies ?? '',
        special_accomodations: item.special_accomodations ?? '',
        date_of_birth: item.date_of_birth ?? item.dob ?? '',
        email: item.email ?? '',
        is_parent_email: item.is_parent_email ?? false,
        parent_ids: (item.parents || []).map((p: any) => p.id) as (string | number)[],
        address: item.address ?? '',
        picture_url: item.picture_url ?? '',
    });

    function submit(e: React.FormEvent) {
        e.preventDefault();
        form.put(`/api/admin/students/${item.id}`, {
            onSuccess: () => window.location.href = `/admin/school/students/${item.id}`
        });
    }

    return (
        <AppLayout breadcrumbs={breadcrumbs}>
            <Head title={`Edit: ${item.first_name} ${item.last_name}`} />
            <div className="p-4">
                <h1 className="text-2xl font-bold mb-4">Edit Student</h1>
                <form onSubmit={submit} className="space-y-3 bg-white dark:bg-black p-4 rounded border">
                    <div className="flex gap-2">
                        <div className="flex-1">
                            <label className="block text-sm font-medium">First Name</label>
                            <input value={form.data.first_name} onChange={(e) => form.setData('first_name', e.target.value)} className="w-full rounded border p-2" />
                        </div>
                        <div className="flex-1">
                            <label className="block text-sm font-medium">Middle Name</label>
                            <input value={form.data.middle_name} onChange={(e) => form.setData('middle_name', e.target.value)} className="w-full rounded border p-2" />
                        </div>
                        <div className="flex-1">
                            <label className="block text-sm font-medium">Last Name</label>
                            <input value={form.data.last_name} onChange={(e) => form.setData('last_name', e.target.value)} className="w-full rounded border p-2" />
                        </div>
                    </div>
                    <div className="flex gap-2">
                        <div className="flex-1">
                            <label className="block text-sm font-medium">Hebrew Name</label>
                            <input value={form.data.hebrew_name} onChange={(e) => form.setData('hebrew_name', e.target.value)} className="w-full rounded border p-2" />
                        </div>
                        <div className="flex-1">
                            <label className="block text-sm font-medium">Pronouns</label>
                            <input value={form.data.pronouns} onChange={(e) => form.setData('pronouns', e.target.value)} className="w-full rounded border p-2" />
                        </div>
                    </div>
                    <div className="flex gap-2">
                        <div className="flex-1">
                            <label className="block text-sm font-medium">Preferred Name</label>
                            <input value={form.data.preferred_name} onChange={(e) => form.setData('preferred_name', e.target.value)} className="w-full rounded border p-2" />
                        </div>
                        <div className="flex-1">
                            <label className="block text-sm font-medium">Allergies</label>
                            <input value={form.data.allergies} onChange={(e) => form.setData('allergies', e.target.value)} className="w-full rounded border p-2" />
                        </div>
                    </div>
                    <div className="flex gap-2">
                        <div className="flex-1">
                            <label className="block text-sm font-medium">Special Accomodations</label>
                            <input value={form.data.special_accomodations} onChange={(e) => form.setData('special_accomodations', e.target.value)} className="w-full rounded border p-2" />
                        </div>
                    </div>
                    <div className="flex gap-2">
                        <div className="flex-1">
                            <label className="block text-sm font-medium">Gender</label>
                            <select value={form.data.gender} onChange={(e) => form.setData('gender', e.target.value)} className="w-full rounded border p-2">
                                <option value="">Select gender</option>
                                <option value="Male">Male</option>
                                <option value="Female">Female</option>
                                <option value="Other">Other</option>
                            </select>
                        </div>
                        <div className="flex-1">
                            <label className="block text-sm font-medium">Date of Birth</label>
                            <input type="date" value={form.data.date_of_birth} onChange={(e) => form.setData('date_of_birth', e.target.value)} className="w-full rounded border p-2" />
                        </div>
                    </div>
                    <div>
                        <label className="block text-sm font-medium">Email</label>
                        <input type="email" value={form.data.email} onChange={(e) => form.setData('email', e.target.value)} className="w-full rounded border p-2" />
                    </div>
                    <div className="flex items-center gap-2">
                        <input type="checkbox" checked={form.data.is_parent_email} onChange={(e) => form.setData('is_parent_email', e.target.checked)} className="rounded" />
                        <label className="text-sm font-medium">Is Parent Email</label>
                    </div>
                    <MultiParentSelector
                        value={form.data.parent_ids}
                        onChange={(value) => form.setData('parent_ids', value)}
                        error={form.errors.parent_ids}
                    />
                    <div>
                        <label className="block text-sm font-medium">Address</label>
                        <textarea value={form.data.address} onChange={(e) => form.setData('address', e.target.value)} className="w-full rounded border p-2" rows={3} />
                    </div>
                    <div>
                        <label className="block text-sm font-medium">Picture URL</label>
                        <input value={form.data.picture_url} onChange={(e) => form.setData('picture_url', e.target.value)} className="w-full rounded border p-2" />
                    </div>
                    <div className="flex gap-2 justify-end">
                        <Link href="/admin/school/students">
                            <Button type="button" variant="outline">Cancel</Button>
                        </Link>
                        <Button type="submit" disabled={form.processing}>Update Student</Button>
                    </div>
                </form>
            </div>
        </AppLayout>
    );
}
