"use client"; import { useEffect, useState } from "react"; import { Card, CardHeader, CardTitle, CardContent } from "@/components/ui/card"; import { motion } from "framer-motion"; interface RegionData { name: string; count: number; color: string; } const regionColors: Record = { Asia: "var(--accent-cyan)", Europe: "var(--accent-purple)", Americas: "var(--accent-pink)", Africa: "var(--accent-orange)", Oceania: "var(--accent-green)", }; export function RegionRanking() { const [regions, setRegions] = useState([]); useEffect(() => { const fetchData = async () => { try { const res = await fetch("/api/v1/stats"); if (res.ok) { const data = await res.json(); const breakdown = (data.regionBreakdown ?? {}) as Record; const sorted = Object.entries(breakdown) .map(([name, count]) => ({ name, count, color: regionColors[name] ?? "var(--accent-cyan)", })) .sort((a, b) => b.count - a.count); setRegions(sorted); } } catch { // retry on interval } }; fetchData(); const interval = setInterval(fetchData, 15000); return () => clearInterval(interval); }, []); const maxCount = Math.max(...regions.map((r) => r.count), 1); return ( Region Ranking {regions.length === 0 ? (

No data yet

) : ( regions.map((region, i) => (
#{i + 1} {region.name}
{region.count}
)) )}
); }