import GroupedTable from '@/components/custom-admin-table/GroupedTable';
import {
    Card,
    CardContent,
    CardDescription,
    CardHeader,
    CardTitle,
} from '@/components/ui/card';
import { useAuthBreadcrumbOperator } from '@/hooks/use-auth-breadcrumb-operator';
import AppLayout from '@/layouts/app-layout';
import { GroupedData } from '@/types/tables';
import { Head, router } from '@inertiajs/react';
import { FileSpreadsheet, Gift } from 'lucide-react';

interface Props {
    grouped: GroupedData;
    totalPagu: number;
    totalRincian: number;
}

export default function DashboardOperator({
    grouped,
    totalPagu,
    totalRincian,
}: Props) {
    const breadcrumbs = useAuthBreadcrumbOperator();

    const totalSubKegiatan = Object.values(grouped).reduce(
        (acc, program) =>
            acc +
            Object.values(program).reduce(
                (subAcc, subList) => subAcc + subList.length,
                0,
            ),
        0,
    );

    const handleViewRincian = (subId: number) => {
        router.get(route('rincian-belanja.show', { id: subId }));
    };

    const handleViewPO = (subId: number) => {
        router.get(route('triwulan.show', { id: subId }));
    };

    const atasCards = [
        {
            title: 'Pagu Anggaran',
            description: 'Total pagu anggaran',
            amount: totalPagu,
            bgColor: 'bg-amber-200',
            iconBg: 'bg-amber-100',
            iconColor: 'text-amber-200',
            Icon: Gift,
        },
        {
            title: 'Total Rincian',
            description: 'Total rincian anggaran yang diinput',
            amount: totalRincian,
            bgColor: 'bg-blue-200',
            iconBg: 'bg-blue-100',
            iconColor: 'text-blue-200',
            Icon: FileSpreadsheet,
        },
    ];

    return (
        <AppLayout breadcrumbs={breadcrumbs}>
            <Head title="Beranda" />
            <div className="flex h-full flex-1 flex-col gap-4 rounded-xl p-4">
                {/* Bagian cards atas */}
                <div className="grid auto-rows-min gap-4 md:grid-cols-2">
                    {atasCards.map((card, index) => (
                        <Card
                            key={index}
                            className={`relative ${card.bgColor}`}
                        >
                            <CardHeader>
                                <CardTitle className="dark:text-black">
                                    {card.title}
                                </CardTitle>
                                <CardDescription className="text-xs dark:text-black">
                                    {card.description}
                                </CardDescription>
                                <div
                                    className={`absolute top-4 right-4 rounded-full ${card.iconBg} p-2`}
                                >
                                    <card.Icon
                                        className={`h-9 w-9 ${card.iconColor}`}
                                    />
                                </div>
                            </CardHeader>
                            <CardContent className="text-2xl font-bold dark:text-black">
                                {card.amount.toLocaleString('id-ID')}
                            </CardContent>
                        </Card>
                    ))}
                </div>

                {/* Bagian tabel */}
                <div className="relative min-h-[400px] flex-1 overflow-hidden rounded-xl border border-sidebar-border/70 md:min-h-min dark:border-sidebar-border">
                    {totalSubKegiatan === 0 ? (
                        <div className="flex h-full items-center justify-center text-gray-500">
                            Tidak ada data sub kegiatan
                        </div>
                    ) : (
                        <GroupedTable
                            grouped={grouped}
                            onViewRincian={handleViewRincian}
                            onViewPO={handleViewPO}
                        />
                    )}
                </div>
            </div>
        </AppLayout>
    );
}
