import { Head, Link, usePage } from '@inertiajs/react';
import { Plus } from 'lucide-react';
import { useCallback, useMemo } from 'react';
import {
    create as advanceCreate,
    index as advancesIndex,
    staff as advancesStaff,
} from '@/actions/App/Http/Controllers/PermanentEmployeeAdvanceController';
import { PermanentEmployeeAdvancesTable } from '@/components/employees/permanent-employee-advances-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 PermanentEmployeeAdvancesIndex() {
    const { t } = useLanguage();
    const p = t.permanentEmployeeAdvancesPage;
    const page = usePage();
    const auth = page.props.auth ?? {};
    const { staff, filters = { search: '', per_page: 10 } } = page.props;

    const canCreate = auth.canCreatePermanentAdvances === true;

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

    const indexUrl = useCallback((opts) => advancesIndex.url(opts), []);

    const tableLabels = useMemo(
        () => ({
            ...p,
            cancel: t.appActions.cancel,
            close: t.appActions.dismiss,
        }),
        [p, t.appActions.cancel, t.appActions.dismiss],
    );

    return (
        <AppLayout breadcrumbs={breadcrumbs}>
            <Head title={p.headTitle} />
            <div className="flex h-full flex-1 flex-col gap-6 overflow-x-auto p-4">
                <Card>
                    <CardHeader className="bg-muted/45 dark:bg-muted/20 flex flex-col gap-4 rounded-t-xl border-b border-border px-6 py-5 sm:flex-row sm:items-start sm:justify-between sm:space-y-0">
                        <div className="space-y-2">
                            <CardTitle className="text-xl font-semibold tracking-tight">
                                {p.title}
                            </CardTitle>
                            <CardDescription className="text-muted-foreground max-w-2xl text-sm leading-relaxed">
                                {p.subtitle}
                            </CardDescription>
                        </div>
                        {canCreate ? (
                            <Button asChild className="shrink-0">
                                <Link href={advanceCreate.url()} prefetch>
                                    <Plus className="size-4" />
                                    {p.addAdvance}
                                </Link>
                            </Button>
                        ) : null}
                    </CardHeader>
                    <CardContent className="px-4 pb-4 sm:px-6">
                        <PermanentEmployeeAdvancesTable
                            staff={staff}
                            filters={filters}
                            labels={tableLabels}
                            indexUrl={indexUrl}
                            staffUrl={(id) => advancesStaff.url(id)}
                        />
                    </CardContent>
                </Card>
            </div>
        </AppLayout>
    );
}
