import { Head, Link, router, usePage } from '@inertiajs/react';
import { Plus } from 'lucide-react';
import { useCallback, useMemo, useState } from 'react';
import { toast } from 'sonner';
import {
    create as sarafsCreate,
    index as sarafsIndex,
    updateStatus,
} from '@/actions/App/Http/Controllers/SarafController';
import { ConfirmActionDialog } from '@/components/confirm-action-dialog';
import { SarafsDataTable } from '@/components/sarafi/sarafs-data-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 SarafsIndex() {
    const { t } = useLanguage();
    const p = t.sarafsPage;
    const a = t.appActions;
    const page = usePage();
    const auth = page.props.auth ?? {};
    const canCreate = auth.canCreateSarafs === true;
    const canUpdate = auth.canUpdateSarafs === true;
    const canView = auth.canViewSarafs === true;
    const { sarafs = [] } = page.props;

    const [pendingId, setPendingId] = useState(null);
    const [sarafToToggle, setSarafToToggle] = useState(null);

    const breadcrumbs = useMemo(
        () => [
            { title: t.dashboard.breadcrumb, href: dashboard() },
            { title: t.nav.sarafi, href: '#' },
            { title: p.breadcrumb, href: sarafsIndex() },
        ],
        [t.dashboard.breadcrumb, t.nav.sarafi, p.breadcrumb],
    );

    const tableLabels = useMemo(() => ({ ...p }), [p]);

    const handleStatusChange = useCallback((saraf) => {
        setSarafToToggle(saraf);
    }, []);

    const performStatusToggle = useCallback(() => {
        if (!sarafToToggle) {
            return;
        }

        setPendingId(sarafToToggle.id);
        router.patch(
            updateStatus.url(sarafToToggle.id),
            { is_active: !sarafToToggle.is_active },
            {
                preserveScroll: true,
                onFinish: () => {
                    setPendingId(null);
                    setSarafToToggle(null);
                },
                onError: () => {
                    setPendingId(null);
                    setSarafToToggle(null);
                    toast.error(a.requestFailed);
                },
            },
        );
    }, [a.requestFailed, sarafToToggle]);

    return (
        <AppLayout breadcrumbs={breadcrumbs}>
            <Head title={p.headTitle} />
            <div className="flex h-full flex-1 flex-col gap-6 overflow-x-auto p-4">
                <ConfirmActionDialog
                    open={sarafToToggle != null}
                    onOpenChange={(open) => {
                        if (!open) {
                            setSarafToToggle(null);
                        }
                    }}
                    title={
                        sarafToToggle?.is_active
                            ? p.confirmDeactivateTitle
                            : p.confirmActivateTitle
                    }
                    description={
                        sarafToToggle?.is_active
                            ? p.confirmDeactivateBody
                            : p.confirmActivateBody
                    }
                    confirmLabel={
                        sarafToToggle?.is_active ? p.deactivate : p.activate
                    }
                    cancelLabel={a.cancel}
                    destructive={sarafToToggle?.is_active === true}
                    processing={pendingId != null && sarafToToggle?.id === pendingId}
                    onConfirm={performStatusToggle}
                />

                <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.headTitle}
                            </CardTitle>
                            <CardDescription className="text-muted-foreground max-w-xl text-sm leading-relaxed">
                                {p.listSubtitle}
                            </CardDescription>
                        </div>
                        {canCreate ? (
                            <Button asChild className="shrink-0">
                                <Link href={sarafsCreate()} prefetch>
                                    <Plus className="size-4" />
                                    {p.createSaraf}
                                </Link>
                            </Button>
                        ) : null}
                    </CardHeader>
                    <CardContent className="px-4 pb-4 pt-4 sm:px-6">
                        <SarafsDataTable
                            sarafs={sarafs}
                            pendingId={pendingId}
                            onStatusChange={handleStatusChange}
                            labels={tableLabels}
                            canUpdate={canUpdate}
                            canView={canView}
                        />
                    </CardContent>
                </Card>
            </div>
        </AppLayout>
    );
}
