import { Box, Text, Group, Stack, ThemeIcon, Skeleton, Divider, } from "@mantine/core"; import { CrownIcon, XIcon, FireIcon, ShieldIcon, ChartLineUpIcon, ShieldCheckIcon, BoxingGloveIcon, Icon, ArrowUpIcon, ArrowDownIcon, } from "@phosphor-icons/react"; import { BaseStats } from "@/types/stats"; interface StatsOverviewProps { statsData: BaseStats | null; isLoading?: boolean; } const StatItem = ({ label, value, suffix = "", Icon, }: { label: string; value: number | null; suffix?: string; Icon?: Icon; isLoading?: boolean; }) => { return ( {Icon && ( )} {label} {value !== null ? ( {`${value}${suffix}`} ) : ( )} ); }; const StatsOverview = ({ statsData, isLoading = false }: StatsOverviewProps) => { if (!statsData && !isLoading) { return ( No stats available yet ); } if (!statsData) return null; const overallStats = { matches: statsData.matches, wins: statsData.wins, losses: statsData.losses, total_cups_made: statsData.total_cups_made, total_cups_against: statsData.total_cups_against, }; const avgCupsPerMatch = overallStats.matches > 0 ? parseFloat((overallStats.total_cups_made / overallStats.matches).toFixed(1)) : 0; const avgCupsAgainstPerMatch = overallStats.matches > 0 ? parseFloat((overallStats.total_cups_against / overallStats.matches).toFixed(1)) : 0; const avgMarginOfVictory = statsData.margin_of_victory ? parseFloat(statsData.margin_of_victory.toFixed(1)) : 0; const avgMarginOfLoss = statsData.margin_of_loss ? parseFloat(statsData.margin_of_loss.toFixed(1)) : 0; const allStats = [ { label: "Matches Played", value: overallStats.matches, Icon: BoxingGloveIcon }, { label: "Wins", value: overallStats.wins, Icon: CrownIcon }, { label: "Losses", value: overallStats.losses, Icon: XIcon }, { label: "Cups Made", value: overallStats.total_cups_made, Icon: FireIcon }, { label: "Cups Against", value: overallStats.total_cups_against, Icon: ShieldIcon }, { label: "Avg Cups Per Game", value: avgCupsPerMatch > 0 ? avgCupsPerMatch : null, Icon: ChartLineUpIcon }, { label: "Avg Cups Against", value: avgCupsAgainstPerMatch > 0 ? avgCupsAgainstPerMatch : null, Icon: ShieldCheckIcon }, { label: "Avg Win Margin", value: avgMarginOfVictory > 0 ? avgMarginOfVictory : null, Icon: ArrowUpIcon }, { label: "Avg Loss Margin", value: avgMarginOfLoss > 0 ? avgMarginOfLoss : null, Icon: ArrowDownIcon }, ]; return ( {allStats.map((stat, index) => ( {index < allStats.length - 1 && } ))} ); }; export const StatsSkeleton = () => { const skeletonStats = [ { label: "Matches Played", Icon: BoxingGloveIcon }, { label: "Wins", Icon: CrownIcon }, { label: "Losses", Icon: XIcon }, { label: "Cups Made", Icon: FireIcon }, { label: "Cups Against", Icon: ShieldIcon }, { label: "Avg Cups Per Game", Icon: ChartLineUpIcon }, { label: "Avg Cups Against", Icon: ShieldCheckIcon }, { label: "Avg Win Margin", Icon: ArrowUpIcon }, { label: "Avg Loss Margin", Icon: ArrowDownIcon }, ]; return ( {skeletonStats.map((stat, index) => ( {index < skeletonStats.length - 1 && } ))} ); }; export default StatsOverview;