import { DataTable } from '@/components/data-table';
import { Button } from '@/components/ui/button';
import { useTranslation } from '@/hooks/use-translation';
import AppLayout from '@/layouts/app-layout';
import { ClicToPayTransaction, type BreadcrumbItem } from '@/types';
import { Head, usePage } from '@inertiajs/react';
import { AlertTriangle, Plus } from 'lucide-react';
import { useEffect, useState } from 'react';
import { toast } from 'sonner';
import { getColumns } from './columns';
import { FiltersCard, type CurrentFilters } from './filters-card';
import GenerateLinkDialog from './generate-link-dialog';

interface PageProps {
    transactions: ClicToPayTransaction[];
    currentFilters: CurrentFilters;
    statusOptions: { value: string; label: string }[];
    creators: { id: number; name: string }[];
    franchises: { id: number; name: string }[];
    enabled: boolean;
    flash?: { type: string; message: string };
    [key: string]: unknown;
}

export default function Index() {
    const { t } = useTranslation();
    const { transactions, currentFilters, statusOptions, creators, franchises, enabled, flash } = usePage<PageProps>().props;
    const [dialogOpen, setDialogOpen] = useState(false);

    const breadcrumbs: BreadcrumbItem[] = [{ title: t('clictopay', 'title'), href: '/paiements/en-ligne' }];

    useEffect(() => {
        if (flash?.type === 'success') toast.success(flash.message);
        else if (flash?.type === 'error') toast.error(flash.message);
    }, [flash]);

    return (
        <AppLayout breadcrumbs={breadcrumbs}>
            <Head title={t('clictopay', 'title')} />
            <div className="flex h-full flex-1 flex-col gap-3 p-2 lg:p-4">
                <div className="flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between">
                    <div>
                        <h1 className="text-xl font-semibold">{t('clictopay', 'title')}</h1>
                        <p className="text-muted-foreground text-sm">{t('clictopay', 'subtitle')}</p>
                    </div>
                    <Button onClick={() => setDialogOpen(true)} disabled={!enabled} className="gap-2">
                        <Plus className="h-4 w-4" />
                        {t('clictopay', 'generate_link')}
                    </Button>
                </div>

                {!enabled && (
                    <div className="flex items-start gap-2 rounded-lg border border-amber-300 bg-amber-50 p-3 text-sm text-amber-800 dark:bg-amber-950/30 dark:text-amber-300">
                        <AlertTriangle className="mt-0.5 h-4 w-4 shrink-0" />
                        <span>{t('clictopay', 'disabled_banner')}</span>
                    </div>
                )}

                <FiltersCard currentFilters={currentFilters} statusOptions={statusOptions} creators={creators} franchises={franchises} t={t} />

                <DataTable columns={getColumns(t)} data={transactions} />
            </div>

            <GenerateLinkDialog open={dialogOpen} onOpenChange={setDialogOpen} t={t} />
        </AppLayout>
    );
}
