'use client' import { useEffect, useState } from 'react' import AdminLayout from '@/components/admin/AdminLayout' import DashboardStats from '@/components/admin/DashboardStats' import RecentActivity from '@/components/admin/RecentActivity' import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' import { Skeleton } from '@/components/ui/skeleton' import { toast } from '@/hooks/use-toast' interface DashboardData { users: { total: number active: number newThisMonth: number verified: number verificationRate: string } revenue: { total: number monthly: number weekly: number } transactions: { total: number monthly: number } services: { total: number active: number breakdown: Array<{ _id: string count: number revenue: number }> } developerRequests: { total: number pending: number } recentActivity: { users: Array<{ _id: string name: string email: string siliconId: string createdAt: string }> transactions: Array<{ _id: string type: string amount: number description: string status: string createdAt: string userId: { name: string email: string siliconId: string } }> } } export default function AdminDashboard() { const [data, setData] = useState(null) const [loading, setLoading] = useState(true) useEffect(() => { fetchDashboardData() }, []) const fetchDashboardData = async () => { try { const token = localStorage.getItem('token') || document.cookie .split('; ') .find((row) => row.startsWith('token=')) ?.split('=')[1] const response = await fetch('/api/admin/dashboard', { headers: { Authorization: `Bearer ${token}`, }, }) if (!response.ok) { throw new Error('Failed to fetch dashboard data') } const dashboardData = await response.json() setData(dashboardData) } catch (error) { console.error('Dashboard fetch error:', error) toast({ title: 'Error', description: 'Failed to load dashboard data', variant: 'destructive', }) } finally { setLoading(false) } } if (loading) { return (

Dashboard

Overview of your SiliconPin platform

{/* Loading skeletons */}
{Array.from({ length: 6 }).map((_, i) => ( ))}
{Array.from({ length: 3 }).map((_, i) => (
))}
{Array.from({ length: 3 }).map((_, i) => (
))}
) } if (!data) { return (

Failed to load dashboard data

) } return (
{/* Header */}
📊

Dashboard

Overview of your SiliconPin platform

{/* Stats Cards */} {/* Service Breakdown */} 🔧 Service Breakdown
{data.services.breakdown.map((service, index) => { const colors = [ 'from-blue-500 to-blue-600', 'from-indigo-500 to-indigo-600', 'from-purple-500 to-purple-600', 'from-pink-500 to-pink-600', 'from-red-500 to-red-600', 'from-orange-500 to-orange-600', 'from-yellow-500 to-yellow-600', 'from-green-500 to-green-600', 'from-teal-500 to-teal-600', 'from-cyan-500 to-cyan-600', ] const colorClass = colors[index % colors.length] return (

{service._id.replace('_', ' ')}

{service.count}

₹{service.revenue.toLocaleString()} revenue

) })}
{/* Recent Activity */}
) }