import { Head, Link, usePage } from '@inertiajs/react';
import { Plus } from 'lucide-react';
import { useMemo } from 'react';
import {
    create as deviceCreate,
    edit as deviceEdit,
    index as devicesIndex,
} from '@/actions/App/Http/Controllers/AttendanceDeviceController';
import { AttendanceDevicesTable } from '@/components/attendance/attendance-devices-table';
import { Button } from '@/components/ui/button';
import {
    Card,
    CardContent,
    CardDescription,
    CardHeader,
    CardTitle,
} from '@/components/ui/card';
import { useLanguage } from '@/contexts/language-context';
import AppLayout from '@/layouts/app-layout';
import { dashboard } from '@/routes';

export default function AttendanceDevicesIndex() {
    const { t } = useLanguage();
    const p = t.attendancePage;
    const page = usePage();
    const { devices, filters } = page.props;

    const breadcrumbs = useMemo(
        () => [
            { title: t.dashboard.breadcrumb, href: dashboard() },
            { title: t.nav.employeeManagement, href: '#' },
            { title: p.breadcrumb, href: '#' },
            { title: p.devicesTitle, href: devicesIndex.url() },
        ],
        [t.dashboard.breadcrumb, t.nav.employeeManagement, p.breadcrumb, p.devicesTitle],
    );

    const tableLabels = useMemo(() => ({ ...p }), [p]);

    return (
        <AppLayout breadcrumbs={breadcrumbs}>
            <Head title={p.devicesTitle} />
            <div className="flex flex-col gap-6 p-4">
                <Card>
                    <CardHeader className="flex flex-row flex-wrap items-start justify-between gap-4">
                        <div>
                            <CardTitle>{p.devicesTitle}</CardTitle>
                            <CardDescription>{p.devicesSubtitle}</CardDescription>
                        </div>
                        <Button asChild>
                            <Link href={deviceCreate.url()} prefetch>
                                <Plus className="size-4" />
                                {p.addDevice}
                            </Link>
                        </Button>
                    </CardHeader>
                    <CardContent>
                        <AttendanceDevicesTable
                            devices={devices}
                            filters={filters}
                            labels={tableLabels}
                            indexUrl={(opts) => devicesIndex.url(opts)}
                            editUrl={(id) => deviceEdit.url({ attendanceDevice: id })}
                        />
                    </CardContent>
                </Card>
            </div>
        </AppLayout>
    );
}
