'use client'; import { useState, useEffect } from 'react'; import { useRouter } from 'next/navigation'; import { Trophy, Users, Award } from 'lucide-react'; import Button from '@/components/ui/Button'; import Heading from '@/components/ui/Heading'; import DriverLeaderboardPreview from '@/components/leaderboards/DriverLeaderboardPreview'; import TeamLeaderboardPreview from '@/components/leaderboards/TeamLeaderboardPreview'; import type { DriverLeaderboardItemViewModel } from '@/lib/view-models/DriverLeaderboardItemViewModel'; import type { TeamSummaryViewModel } from '@/lib/view-models/TeamSummaryViewModel'; import { useServices } from '@/lib/services/ServiceProvider'; // ============================================================================ // TYPES // ============================================================================ // ============================================================================ // MAIN PAGE COMPONENT // ============================================================================ export default function LeaderboardsPage() { const router = useRouter(); const { driverService, teamService } = useServices(); const [drivers, setDrivers] = useState([]); const [teams, setTeams] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { const load = async () => { try { const driversViewModel = await driverService.getDriverLeaderboard(); const teams = await teamService.getAllTeams(); setDrivers(driversViewModel.drivers); setTeams(teams); } catch (error) { console.error('Failed to load leaderboard data:', error); setDrivers([]); setTeams([]); } finally { setLoading(false); } }; void load(); }, []); const handleDriverClick = (driverId: string) => { router.push(`/drivers/${driverId}`); }; const handleTeamClick = (teamId: string) => { router.push(`/teams/${teamId}`); }; if (loading) { return (

Loading leaderboards...

); } return (
{/* Hero Section */}
{/* Background decoration */}
Leaderboards

Where champions rise and legends are made

Track the best drivers and teams across all competitions. Every race counts. Every position matters. Who will claim the throne?

{/* Quick Nav */}
{/* Leaderboard Grids */}
); }