"use client"; import { useEffect, useState } from "react"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { StatCard } from "@/components/stat-card"; import { Users, Activity, AlertTriangle, Server, Wifi, Database } from "lucide-react"; import { api, SystemStats, HealthStatus, Subscriber } from "@/lib/api"; export default function DashboardPage() { const [stats, setStats] = useState(null); const [health, setHealth] = useState(null); const [subscribers, setSubscribers] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { const loadData = async () => { try { setLoading(true); const [statsData, healthData, subscribersData] = await Promise.all([ api.system.stats(), api.system.health(), api.subscribers.list(1, 5) ]); setStats(statsData); setHealth(healthData); setSubscribers(subscribersData.data); } catch (err) { setError(err instanceof Error ? err.message : "Failed to load dashboard data"); } finally { setLoading(false); } }; loadData(); }, []); if (loading) { return (
{[...Array(4)].map((_, i) => (
))}
); } if (error) { return (

Error loading dashboard

{error}

); } return (

Dashboard

Telecom platform overview and real-time metrics.

Recent Subscribers
{subscribers.length > 0 ? ( subscribers.map((sub) => (

{sub.first_name} {sub.last_name}

{sub.msisdn}

{sub.status}
)) ) : (

No recent subscribers found

)}
System Status
{[ { label: "API Server", icon: Server, status: health ? "Connected" : "Disconnected", ok: true }, { label: "Database", icon: Database, status: "Connected", ok: true }, { label: "Redis Cache", icon: Database, status: health?.redis_connected ? "Connected" : "Disconnected", ok: health?.redis_connected }, { label: "Charging Engine", icon: Activity, status: health?.active_sync ? "Running" : "Stopped", ok: health?.active_sync }, { label: "Memory Usage", icon: Server, status: `${health?.memory_usage || 0}%`, ok: (health?.memory_usage || 0) < 80 }, ].map((svc) => (
{svc.label}
{svc.status}
))} {health?.last_sync && (
Last sync: {new Date(health.last_sync).toLocaleString()}
)}
); }