import React, { useMemo } from "react"; import { Users, CalendarDays, BarChart2, Trophy } from "lucide-react"; import { useBreakpoint } from "../../hooks/useBreakpoint"; function fmt(n: number | undefined): string { if (n == null || Number.isNaN(n)) return "—"; return n.toLocaleString(); } export function StatsBar({ loading, participantCount, sessionCount, quizPollCount, pointsAwarded, statusCounts, upcomingSessionCount, pointsRedeemed, }: { loading?: boolean; participantCount?: number; sessionCount?: number; quizPollCount?: number; pointsAwarded?: number; pointsRedeemed?: number; statusCounts?: Record; upcomingSessionCount?: number; }) { const bp = useBreakpoint(); const cols = bp === "mobile" ? 2 : 4; const participantTrend = useMemo(() => { if (loading) return undefined; const ci = statusCounts?.checked_in ?? 0; const conf = statusCounts?.confirmed ?? 0; if (ci) return `${ci.toLocaleString()} checked in`; if (conf) return `${conf.toLocaleString()} confirmed`; return undefined; }, [loading, statusCounts]); const sessionTrend = !loading && upcomingSessionCount != null && upcomingSessionCount > 0 ? `${upcomingSessionCount} upcoming` : undefined; const pointsTrend = !loading && pointsRedeemed != null && pointsRedeemed > 0 ? `${pointsRedeemed.toLocaleString()} redeemed` : undefined; const stats = [ { icon: , label: "Participants", value: loading ? "—" : fmt(participantCount), trend: participantTrend, trendUp: !!(statusCounts?.checked_in && statusCounts.checked_in > 0), accent: "var(--chart-1)", }, { icon: , label: "Sessions", value: loading ? "—" : fmt(sessionCount), trend: sessionTrend, trendUp: false, accent: "var(--chart-3)", }, { icon: , label: "Quizzes & Polls", value: loading ? "—" : fmt(quizPollCount), trend: undefined, trendUp: false, accent: "var(--chart-4)", }, { icon: , label: "Points Awarded", value: loading ? "—" : fmt(pointsAwarded), trend: pointsTrend, trendUp: false, accent: "var(--chart-2)", }, ]; return (
{stats.map((stat, idx) => (
{stat.icon}

{stat.value}

{stat.label}

{stat.trend && (

{stat.trend}

)}
))}
); }