import { Link } from "react-router"; import { format, parseISO } from "date-fns"; import { Badge } from "~/components/ui/badge"; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "~/components/ui/card"; import { Trophy, Target, Flag, Calendar } from "lucide-react"; interface SportSeasonCardProps { leagueId: string; sportSeasonId: string; sportName: string; seasonName: string; status: "upcoming" | "active" | "completed"; scoringPattern?: string | null; nextEvent?: { name: string; eventDate: string | null } | null; } function formatNextEventDate(dateStr: string | null | undefined): string { if (!dateStr) return ""; try { return format(parseISO(dateStr), "MMM d"); } catch { return ""; } } export function SportSeasonCard({ leagueId, sportSeasonId, sportName, seasonName, status, scoringPattern, nextEvent, }: SportSeasonCardProps) { const getStatusBadge = () => { switch (status) { case "upcoming": return ( Upcoming ); case "active": return ( Active ); case "completed": return ( Completed ); } }; const getScoringPatternLabel = () => { if (!scoringPattern) return null; switch (scoringPattern) { case "playoff_bracket": return "Playoff Bracket"; case "season_standings": return "Season Standings"; case "qualifying_points": return "Qualifying Points"; default: return null; } }; const scoringLabel = getScoringPatternLabel(); const isPlayoffType = scoringPattern === "playoff_bracket"; const nextEventDate = formatNextEventDate(nextEvent?.eventDate); return ( {sportName} {seasonName} {getStatusBadge()} {scoringLabel && ( {isPlayoffType ? ( ) : ( )} {scoringLabel} )} {nextEvent && ( Next: {nextEvent.name} {nextEventDate && ( — {nextEventDate} )} )} ); }