import prisma from "@/lib/prisma";

export default async function dashboardSummary() {
    try {
        const currentYear = new Date().getFullYear();

        // Get dashboard summary
        const [
            totalPenduduk,
            totalKK,
            totalKelahiran,
            totalKemiskinan,
            kematianData,
            pindahMasukData,
            pindahKeluarData,
            agamaData,
            umurData,
            banjarData
        ] = await Promise.all([
            // Total penduduk - hitung dari data banjar
            prisma.dataBanjar.aggregate({
                where: { isActive: true, tahun: currentYear },
                _sum: { penduduk: true }
            }),
            
            // Total KK
            prisma.dataBanjar.aggregate({
                where: { isActive: true, tahun: currentYear },
                _sum: { kk: true }
            }),
            
            // Total kelahiran tahun ini
            prisma.kelahiran.count({
                where: {
                    isActive: true,
                    tanggal: {
                        gte: new Date(`${currentYear}-01-01`),
                        lte: new Date(`${currentYear}-12-31`),
                    }
                }
            }),
            
            // Total penduduk miskin
            prisma.dataBanjar.aggregate({
                where: { isActive: true, tahun: currentYear },
                _sum: { miskin: true }
            }),
            
            // Kelahiran data
            prisma.kelahiran.findMany({
                where: {
                    isActive: true,
                    tanggal: {
                        gte: new Date(`${currentYear}-01-01`),
                        lte: new Date(`${currentYear}-12-31`),
                    }
                },
                orderBy: { tanggal: 'asc' }
            }),
            
            // Kematian data
            prisma.kematian.findMany({
                where: {
                    isActive: true,
                    tanggal: {
                        gte: new Date(`${currentYear}-01-01`),
                        lte: new Date(`${currentYear}-12-31`),
                    }
                },
                orderBy: { tanggal: 'asc' }
            }),
            
            // Pindah masuk
            prisma.migrasiPenduduk.count({
                where: {
                    isActive: true,
                    jenis: 'MASUK',
                    tanggal: {
                        gte: new Date(`${currentYear}-01-01`),
                        lte: new Date(`${currentYear}-12-31`),
                    }
                }
            }),
            
            // Pindah keluar
            prisma.migrasiPenduduk.count({
                where: {
                    isActive: true,
                    jenis: 'KELUAR',
                    tanggal: {
                        gte: new Date(`${currentYear}-01-01`),
                        lte: new Date(`${currentYear}-12-31`),
                    }
                }
            }),
            
            // Data agama
            prisma.distribusiAgama.findMany({
                where: { isActive: true, tahun: currentYear },
                orderBy: { jumlah: 'desc' }
            }),
            
            // Data umur
            prisma.distribusiUmur.findMany({
                where: { isActive: true, tahun: currentYear },
                orderBy: { createdAt: 'asc' }
            }),
            
            // Data banjar
            prisma.dataBanjar.findMany({
                where: { isActive: true, tahun: currentYear },
                orderBy: { nama: 'asc' }
            })
        ]);

        return {
            success: true,
            message: "Dashboard summary berhasil diambil",
            data: {
                tahun: currentYear,
                summary: {
                    totalPenduduk: totalPenduduk._sum.penduduk || 0,
                    totalKK: totalKK._sum.kk || 0,
                    totalKelahiran: totalKelahiran,
                    totalKemiskinan: totalKemiskinan._sum.miskin || 0,
                },
                dinamika: {
                    kelahiran: totalKelahiran,
                    kematian: kematianData.length,
                    pindahMasuk: pindahMasukData,
                    pindahKeluar: pindahKeluarData,
                },
                agama: agamaData,
                umur: umurData,
                banjar: banjarData,
            }
        };
    } catch (error) {
        console.error("Error fetching dashboard summary:", error);
        return {
            success: false,
            message: "Terjadi kesalahan saat mengambil data dashboard",
            data: null,
        };
    }
}
