/* eslint-disable @typescript-eslint/no-explicit-any */ import { Paper, Title, Box, Text, Stack, Group, rem } from '@mantine/core' import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, Legend, ResponsiveContainer, Cell, } from 'recharts' import { APBDes, APBDesItem } from '../types/apbdes' interface ComparisonChartProps { apbdesData: APBDes } export default function ComparisonChart({ apbdesData }: ComparisonChartProps) { const items = apbdesData?.items || [] const tahun = apbdesData?.tahun || new Date().getFullYear() const pendapatan = items.filter((i: APBDesItem) => i.tipe === 'pendapatan') const belanja = items.filter((i: APBDesItem) => i.tipe === 'belanja') const pembiayaan = items.filter((i: APBDesItem) => i.tipe === 'pembiayaan') const totalPendapatan = pendapatan.reduce((sum, i) => sum + i.anggaran, 0) const totalBelanja = belanja.reduce((sum, i) => sum + i.anggaran, 0) const totalPembiayaan = pembiayaan.reduce((sum, i) => sum + i.anggaran, 0) // Hitung total realisasi dari realisasiItems (konsisten dengan RealisasiTable) const totalPendapatanRealisasi = pendapatan.reduce( (sum, i) => { if (i.realisasiItems && i.realisasiItems.length > 0) { return sum + i.realisasiItems.reduce((sumReal, real) => sumReal + (real.jumlah || 0), 0) } return sum }, 0 ) const totalBelanjaRealisasi = belanja.reduce( (sum, i) => { if (i.realisasiItems && i.realisasiItems.length > 0) { return sum + i.realisasiItems.reduce((sumReal, real) => sumReal + (real.jumlah || 0), 0) } return sum }, 0 ) const totalPembiayaanRealisasi = pembiayaan.reduce( (sum, i) => { if (i.realisasiItems && i.realisasiItems.length > 0) { return sum + i.realisasiItems.reduce((sumReal, real) => sumReal + (real.jumlah || 0), 0) } return sum }, 0 ) const formatRupiah = (value: number) => { if (value >= 1000000000) { return `Rp ${(value / 1000000000).toFixed(1)}B` } if (value >= 1000000) { return `Rp ${(value / 1000000).toFixed(1)}Jt` } if (value >= 1000) { return `Rp ${(value / 1000).toFixed(0)}Rb` } return `Rp ${value.toFixed(0)}` } const data = [ { name: 'Pendapatan', pagu: totalPendapatan, realisasi: totalPendapatanRealisasi, fill: '#40c057', }, { name: 'Belanja', pagu: totalBelanja, realisasi: totalBelanjaRealisasi, fill: '#fa5252', }, { name: 'Pembiayaan', pagu: totalPembiayaan, realisasi: totalPembiayaanRealisasi, fill: '#fd7e14', }, ] const CustomTooltip = ({ active, payload }: any) => { if (active && payload && payload.length) { const data = payload[0].payload return ( {data.name} Pagu: {formatRupiah(data.pagu)} Realisasi: {formatRupiah(data.realisasi)} {data.pagu > 0 && ( Persentase: = data.pagu ? 'teal' : 'blue'} > {((data.realisasi / data.pagu) * 100).toFixed(1)}% )} ) } return null } return ( Perbandingan Pagu vs Realisasi {tahun} } /> {data.map((entry, index) => ( ))} *Geser cursor pada bar untuk melihat detail ) }