import { Head, Link, usePage } from '@inertiajs/react';
import { Plus } from 'lucide-react';
import { useMemo } from 'react';
import { index as contractsIndex } from '@/actions/App/Http/Controllers/TemporaryEmployeeContractController';
import {
    create as temporaryCreate,
    edit as temporaryEdit,
    index as temporaryIndex,
    updateStatus as temporaryUpdateStatus,
} from '@/actions/App/Http/Controllers/TemporaryEmployeeController';
import { TemporaryEmployeesTable } from '@/components/employees/temporary-employees-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 TemporaryEmployeesIndex() {
    const { t } = useLanguage();
    const p = t.employeesTemporaryPage;
    const a = t.appActions;
    const page = usePage();
    const { employees, filters = { search: '', per_page: 10 } } = page.props;

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

    const tableLabels = useMemo(
        () => ({
            colSerial: p.colSerial,
            colFullName: p.colFullName,
            colDesignation: p.colDesignation,
            colFatherName: p.colFatherName,
            colNationalCardNumber: p.colNationalCardNumber,
            colContact: p.colContact,
            colStatus: p.colStatus,
            colAction: p.colAction,
            statusActive: p.statusActive,
            statusInactive: p.statusInactive,
            editEmployee: p.editEmployee,
            contractsAction: p.contractsAction,
            viewEmployee: p.viewEmployee,
            viewEmployeeSubtitle: p.viewEmployeeSubtitle,
            actionsMenuAria: p.actionsMenuAria,
            viewDocument: p.viewDocument,
            notProvided: p.notProvided,
            sectionPersonal: p.sectionPersonal,
            sectionContact: p.sectionContact,
            sectionDocuments: p.sectionDocuments,
            fullName: p.fullName,
            designation: p.designation,
            fatherName: p.fatherName,
            nationalCardNumber: p.nationalCardNumber,
            healthCard: p.healthCard,
            address: p.address,
            contactNumber: p.contactNumber,
            empty: p.empty,
            searchPlaceholder: p.searchPlaceholder,
            paginationPrevious: p.paginationPrevious,
            paginationNext: p.paginationNext,
            paginationSummary: p.paginationSummary,
            paginationPages: p.paginationPages,
            summaryEmpty: p.summaryEmpty,
            rowsPerPage: p.rowsPerPage,
            activateEmployee: p.activateEmployee,
            deactivateEmployee: p.deactivateEmployee,
            confirmActivateTitle: p.confirmActivateTitle,
            confirmActivateBody: p.confirmActivateBody,
            confirmDeactivateTitle: p.confirmDeactivateTitle,
            confirmDeactivateBody: p.confirmDeactivateBody,
            toastStatusUpdated: p.toastStatusUpdated,
            toastActionFailed: a.requestFailed,
            cancel: a.cancel,
        }),
        [p, a],
    );

    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-xl text-sm leading-relaxed">
                                {p.listSubtitle}
                            </CardDescription>
                        </div>
                        <Button asChild className="shrink-0">
                            <Link href={temporaryCreate()} prefetch>
                                <Plus className="size-4" />
                                {p.addEmployee}
                            </Link>
                        </Button>
                    </CardHeader>
                    <CardContent className="px-4 pb-4 sm:px-6">
                        <TemporaryEmployeesTable
                            employees={employees}
                            filters={filters}
                            labels={tableLabels}
                            indexUrl={temporaryIndex.url}
                            editUrl={(id) => temporaryEdit.url(id)}
                            contractsUrl={(id) =>
                                contractsIndex.url({ temporaryEmployee: id })
                            }
                            statusUrl={(id) => temporaryUpdateStatus.url(id)}
                        />
                    </CardContent>
                </Card>
            </div>
        </AppLayout>
    );
}
