'use client' import { useState, useEffect, useCallback } from 'react' import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' import { Button } from '@/components/ui/button' import { Badge } from '@/components/ui/badge' import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs' import { Input } from '@/components/ui/input' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select' import { ArrowLeft, Download, Calendar, DollarSign, TrendingUp, Users, BarChart3, FileText, Filter } from 'lucide-react' import { motion } from 'framer-motion' import { toast } from 'sonner' import Link from 'next/link' import { DashboardHeader } from '@/components/dashboard/DashboardHeader' interface ReportData { commissions: { total: number thisMonth: number lastMonth: number growth: number byLevel: { level: number; amount: number; count: number }[] recent: { id: string amount: number level: number type: string status: string createdAt: string fromUser: { name: string; email: string } }[] } team: { totalMembers: number activeMembers: number newThisMonth: number byLevel: { level: number; count: number }[] } sales: { totalVolume: number personalVolume: number teamVolume: number ordersCount: number } } export default function ReportsPage() { const [reportData, setReportData] = useState(null) const [loading, setLoading] = useState(true) const [dateRange, setDateRange] = useState('30') const [reportType, setReportType] = useState('all') const fetchReportData = useCallback(async () => { try { setLoading(true) const response = await fetch(`/api/dashboard/reports?range=${dateRange}&type=${reportType}`) const data = await response.json() setReportData(data) } catch (error) { console.error('Error fetching report data:', error) toast.error('Failed to load report data') } finally { setLoading(false) } }, [dateRange, reportType]) useEffect(() => { fetchReportData() }, [fetchReportData]) const downloadReport = async (type: 'pdf' | 'excel') => { try { const response = await fetch(`/api/dashboard/reports/download?type=${type}&range=${dateRange}`) const blob = await response.blob() const url = window.URL.createObjectURL(blob) const a = document.createElement('a') a.href = url a.download = `report-${Date.now()}.${type === 'pdf' ? 'pdf' : 'xlsx'}` document.body.appendChild(a) a.click() window.URL.revokeObjectURL(url) document.body.removeChild(a) toast.success(`${type.toUpperCase()} report downloaded successfully`) } catch (error) { toast.error('Failed to download report') } } if (loading) { return (
) } return (
{/* Header */} } actions={ <> } /> {/* Summary Cards */}

Total Commissions

₹{reportData?.commissions.total.toFixed(2) || '0.00'}

{(reportData?.commissions.growth || 0) > 0 ? '+' : ''}{(reportData?.commissions.growth || 0).toFixed(1)}% from last period

Team Members

{reportData?.team.totalMembers || 0}

{reportData?.team.newThisMonth || 0} new this month

Total Volume

₹{(reportData?.sales.totalVolume || 0).toFixed(0)}

{reportData?.sales.ordersCount || 0} orders

Active Members

{reportData?.team.activeMembers || 0}

{((reportData?.team.activeMembers || 0) / Math.max(reportData?.team.totalMembers || 1, 1) * 100).toFixed(1)}% active rate

{/* Detailed Reports */} Commission Analysis Team Performance Sales Reports
Commission by Level
{(reportData?.commissions.byLevel || []).map((levelData) => (

Level {levelData.level}

{levelData.count} commissions

₹{levelData.amount.toFixed(2)}

))}
Recent Commissions
{(reportData?.commissions.recent || []).slice(0, 5).map((commission) => (

Level {commission.level}

{commission.fromUser.name}

{new Date(commission.createdAt).toLocaleDateString()}

+₹{commission.amount.toFixed(2)}

{commission.status}
))}
Team Distribution by Level
{(reportData?.team.byLevel || []).map((levelData) => (

Level {levelData.level}

Direct referrals

{levelData.count} members

))}
Team Growth Metrics
Total Team Size {reportData?.team.totalMembers || 0}
Active Members {reportData?.team.activeMembers || 0}
New This Month {reportData?.team.newThisMonth || 0}
Sales Performance

Personal Volume

₹{(reportData?.sales.personalVolume || 0).toFixed(2)}

Your direct sales

Team Volume

₹{(reportData?.sales.teamVolume || 0).toFixed(2)}

Team sales volume

Total Orders

{reportData?.sales.ordersCount || 0}

Orders processed

) }