'use client'; import { useQuery } from '@tanstack/react-query'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Skeleton } from '@/components/ui/skeleton'; import { api } from '@/lib/api'; import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer, PieChart, Pie, Cell, Legend, } from 'recharts'; const PIE_COLORS = ['#0891B2', '#059669', '#F59E0B', '#EF4444', '#8B5CF6', '#EC4899']; export default function ReportsPage() { const { data: collection, isLoading: loadingCollection } = useQuery({ queryKey: ['reports-collection'], queryFn: async () => (await api.get('/api/v1/reports/collection')).data, }); const { data: aging, isLoading: loadingAging } = useQuery({ queryKey: ['reports-aging'], queryFn: async () => (await api.get('/api/v1/reports/aging')).data, }); const { data: subscribers, isLoading: loadingSubs } = useQuery({ queryKey: ['reports-subscribers'], queryFn: async () => (await api.get('/api/v1/reports/subscribers')).data, }); const { data: revenue, isLoading: loadingRevenue } = useQuery({ queryKey: ['reports-revenue'], queryFn: async () => (await api.get('/api/v1/reports/revenue')).data, }); const { data: plans, isLoading: loadingPlans } = useQuery({ queryKey: ['reports-plans'], queryFn: async () => (await api.get('/api/v1/reports/plans')).data, }); const collectionList = Array.isArray(collection) ? collection : []; const agingList = Array.isArray(aging) ? aging : []; const revList = Array.isArray(revenue) ? revenue : []; const planList = Array.isArray(plans) ? plans : []; // Subscribers summary const subSummary = subscribers ? [ { name: 'Active', value: (subscribers as any).active ?? 0 }, { name: 'Pending', value: (subscribers as any).pending ?? 0 }, { name: 'Suspended', value: (subscribers as any).suspended ?? 0 }, { name: 'Disconnected', value: (subscribers as any).disconnected ?? 0 }, ].filter(s => s.value > 0) : []; return (

Reports & Analytics

Business performance overview

{/* Revenue Trend */} Monthly Revenue (₱) {loadingRevenue ? : ( `₱${Number(v).toLocaleString()}`} /> [`₱${Number(v).toLocaleString()}`, 'Revenue']} /> )} {/* Subscriber Status */} Subscriber Status {loadingSubs ? : subSummary.length === 0 ? (

No data

) : ( `${name}: ${value}`}> {subSummary.map((_, i) => )} )}
{/* Aging */} Invoice Aging (₱) {loadingAging ? : agingList.length === 0 ? (

No outstanding invoices

) : ( [`₱${Number(v).toLocaleString()}`, 'Amount']} /> )}
{/* Collection by Collector */} Collection by Collector {loadingCollection ? : collectionList.length === 0 ? (

No collection data

) : (
{collectionList.map((c: any, i: number) => (

{c.collector}

{c.paymentCount} payments

₱{Number(c.totalAmount).toLocaleString()}

))}
)}
{/* Plans Distribution */} Subscribers by Plan {loadingPlans ? : planList.length === 0 ? (

No data

) : (
{planList.map((p: any, i: number) => (

{p.planName ?? p.name ?? 'Plan ' + (i+1)}

x.count || 1))) * 100)}%` }} />

{p.count}

))}
)}
); }