// components/events/EventResultsClient.tsx 'use client'; import { useEffect, useState } from 'react'; import { TrophyIcon, UsersIcon, FlagIcon } from '@/components/ui/icons'; interface TeamStanding { team_id: number; team_name: string; total_points: number; races_participated: number; best_finish: number; drivers: { driver_guid: string; driver_name: string; position: number; points_awarded: number; dnf: boolean; }[]; } function getPositionColor(position: number): string { if (position === 1) return 'bg-yellow-500/20 border-yellow-500/50 text-yellow-400'; if (position === 2) return 'bg-gray-400/20 border-gray-400/50 text-gray-300'; if (position === 3) return 'bg-orange-600/20 border-orange-600/50 text-orange-400'; return 'bg-white/5 border-white/10 text-white/60'; } export default function EventResultsClient({ eventId, initialStandings }: { eventId: number; initialStandings: TeamStanding[] }) { const [standings, setStandings] = useState(initialStandings); const [isLoading, setIsLoading] = useState(false); // Auto-refresh every 5 seconds useEffect(() => { const fetchResults = async () => { try { setIsLoading(true); const response = await fetch(`/api/events/${eventId}/results`); const data = await response.json(); setStandings(data.standings); } catch (error) { console.error('[Results] Failed to fetch:', error); } finally { setIsLoading(false); } }; const interval = setInterval(fetchResults, 5000); return () => clearInterval(interval); }, [eventId]); if (standings.length === 0) { return (

NO RESULTS YET

Results will appear after the event concludes

); } return (
{standings.map((team: TeamStanding, index: number) => (
{/* Position Badge */}
{index + 1}
{/* Team Info */}

{team.team_name}

{team.drivers.length} {team.drivers.length === 1 ? 'Driver' : 'Drivers'}
Best Finish: P{team.best_finish}
{/* Total Points */}
{team.total_points}
POINTS
{/* Driver Results */}
{team.drivers.map((driver: any) => (
P{driver.position}
{driver.driver_name}
{driver.dnf && (
DNF
)}
{driver.points_awarded}
pts
))}
))}
); }