"use client"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { Activity, Database, FileText, Key, Users, Image as ImageIcon, Megaphone, Layers, TrendingUp, PieChart, BarChart3, Calendar, Target, Send, CheckCircle2, XCircle } from "lucide-react"; import { useDashboardStats } from "@/modules/admin/hooks"; import { useCampaignAnalytics } from "@/modules/campaigns/hooks"; import { Badge } from "@/components/ui/badge"; import { LineChart, Line, BarChart, Bar, PieChart as RechartsPie, Pie, Cell, XAxis, YAxis, CartesianGrid, Tooltip, Legend, ResponsiveContainer, Area, AreaChart, } from "recharts"; const COLORS = ['#404040', '#606060', '#808080', '#a0a0a0', '#505050', '#707070', '#909090']; export default function DashboardPage() { const { data, isLoading } = useDashboardStats(); const { data: campaignAnalyticsData, isLoading: isCampaignLoading } = useCampaignAnalytics(); const stats = data?.data?.summary; const charts = data?.data?.charts; const campaignAnalytics = campaignAnalyticsData?.data; if (isLoading || isCampaignLoading) { return (

Loading dashboard...

); } const contentByTypeData = charts?.contentByType.labels.map((label: string, index: number) => ({ name: label, value: charts.contentByType.data[index], })) || []; const contentByCorpData = charts?.contentByCorpType.labels.map((label: string, index: number) => ({ name: label, value: charts.contentByCorpType.data[index], })) || []; const campaignStatusData = charts?.campaignStatus.labels.map((label: string, index: number) => ({ name: label, value: charts.campaignStatus.data[index], })) || []; const userTrendData = charts?.userRegistrationTrend.labels.map((label: string, index: number) => ({ date: label, users: charts.userRegistrationTrend.data[index], })) || []; const timelineData = Object.entries(charts?.contentCreationTimeline || {}).map(([date, types]) => { const typedTypes = types as Record; return { date, ...typedTypes, }; }); return (
{/* Hero Header - Windows 10 Style */}

Admin CSA Dashboard

Enterprise Management & Analytics Platform

System Online
{new Date().toLocaleDateString('id-ID', { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' })}
{/* Key Metrics - Clean Cards */}
Total Content
{stats?.content.total || 0}

Across all platforms

Active Users
{stats?.infra.users || 0}

Registered users

Campaigns
{stats?.campaigns || 0}

Active campaigns

API Keys
{stats?.infra.apiKeys || 0}

Active tokens

{/* Campaign Analytics Section */} {campaignAnalytics && ( <>

Campaign Analytics

{/* Campaign Summary Cards */}
Total Campaigns
{campaignAnalytics.summary.campaigns.total}

{campaignAnalytics.summary.campaigns.upcomingCount} upcoming

Target Users
{campaignAnalytics.summary.delivery.totalTargetUsers}

Total reached

Delivered
{campaignAnalytics.summary.delivery.totalDelivered}

{campaignAnalytics.summary.delivery.overallDeliveryRate} success rate

Failed
{campaignAnalytics.summary.delivery.totalFailed}

Failed deliveries

{/* Campaign Charts */}
Campaign Status
Distribution by status
({ name: label, value: campaignAnalytics.charts.statusDistribution.data[index], }))} cx="50%" cy="50%" labelLine={false} label={({ name, value }: any) => `${name}: ${value}`} outerRadius={80} fill="#8884d8" dataKey="value" > {campaignAnalytics.charts.statusDistribution.labels.map((_: any, index: number) => ( ))}
Delivery Status
Success vs failure rate
({ name: label, value: campaignAnalytics.charts.deliveryStatusDistribution.data[index], }))} >
Creation Trend
Campaigns created over time
({ date: label, count: campaignAnalytics.charts.creationTrend.data[index], }))} >
{/* Top Performing Campaign */} {campaignAnalytics.topPerforming.length > 0 && (
Top Performing
Best campaign by delivery rate
{campaignAnalytics.topPerforming.map((campaign: any) => (

{campaign.title}

{new Date(campaign.date).toLocaleDateString()}

{campaign.targetUsers}
Target
{campaign.successCount}
Success
{campaign.failureCount}
Failed
Delivery Rate = 90 ? 'text-green-600' : campaign.deliveryRate >= 70 ? 'text-yellow-600' : 'text-red-600' }`}> {campaign.deliveryRate.toFixed(2)}%
))}
)}
)} {/* Content Management Section */}

Content Management

Content Distribution
Content breakdown by type
`${name} ${((percent || 0) * 100).toFixed(0)}%`} outerRadius={80} fill="#8884d8" dataKey="value" > {contentByTypeData.map((_entry: any, index: number) => ( ))}
Content by Corporation
Content distribution across corps
User Registration Trend
New user registrations over time
Campaign Status
Current campaign distribution
`${name}: ${value}`} outerRadius={80} fill="#8884d8" dataKey="value" > {campaignStatusData.map((_entry: any, index: number) => ( ))}
{timelineData.length > 0 && (
Content Creation Timeline
Content created over time by type
)} {charts?.contentMatrix && charts.contentMatrix.length > 0 && ( Content Matrix Content distribution by type and corporation
{charts.contentMatrix.map((item: any, index: number) => ( ))}
Content Type Corporation Count
{item.type} {item.corp} {item.count}
)} Infrastructure Overview System resources and services

{stats?.infra.apiKeys || 0}

API Keys

{stats?.infra.buckets || 0}

Buckets

{stats?.infra.users || 0}

Users

Content Type Breakdown Distribution of content across different types
{stats?.content.splash || 0}

Splash

{stats?.content.promo || 0}

Promo

{stats?.content.article || 0}

Article

{stats?.content.banner || 0}

Banner

{stats?.content.floatingWidget || 0}

Widget

); }