import React from 'react';
import { Calendar, Clock, PlayCircle, CheckCircle2, XCircle, Car, Zap, Trophy, ArrowRight, ChevronRight } from 'lucide-react';
import { Box } from '@/ui/Box';
import { Heading } from '@/ui/Heading';
import { Text } from '@/ui/Text';
import { Link } from '@/ui/Link';
import { Card } from '@/ui/Card';
import { Stack } from '@/ui/Stack';
import { Badge } from '@/ui/Badge';
import type { RaceViewData } from '@/lib/view-data/RacesViewData';
import { routes } from '@/lib/routing/RouteConfig';
interface RaceListProps {
racesByDate: Array<{
dateKey: string;
dateLabel: string;
races: RaceViewData[];
}>;
totalCount: number;
onRaceClick: (raceId: string) => void;
}
export function RaceList({ racesByDate, totalCount, onRaceClick }: RaceListProps) {
const statusConfig = {
scheduled: {
icon: Clock,
variant: 'primary' as const,
label: 'Scheduled',
},
running: {
icon: PlayCircle,
variant: 'success' as const,
label: 'LIVE',
},
completed: {
icon: CheckCircle2,
variant: 'default' as const,
label: 'Completed',
},
cancelled: {
icon: XCircle,
variant: 'warning' as const,
label: 'Cancelled',
},
};
if (racesByDate.length === 0) {
return (
No races found
{totalCount === 0
? 'No races have been scheduled yet'
: 'Try adjusting your filters'}
);
}
return (
{racesByDate.map((group) => (
{/* Date Header */}
{group.dateLabel}
{group.races.length} race{group.races.length !== 1 ? 's' : ''}
{/* Races for this date */}
{group.races.map((race) => {
const config = statusConfig[race.status as keyof typeof statusConfig] || statusConfig.scheduled;
const StatusIcon = config.icon;
return (
onRaceClick(race.id)}
style={{
position: 'relative',
overflow: 'hidden',
borderRadius: '0.75rem',
backgroundColor: '#262626',
border: '1px solid rgba(38, 38, 38, 1)',
padding: '1rem',
cursor: 'pointer'
}}
>
{/* Live indicator */}
{race.status === 'running' && (
)}
{/* Time Column */}
{race.timeLabel}
{race.status === 'running'
? 'LIVE'
: race.relativeTimeLabel}
{/* Divider */}
{/* Main Content */}
{race.track}
{race.car}
{race.strengthOfField && (
SOF {race.strengthOfField}
)}
{/* Status Badge */}
{config.label}
{/* League Link */}
e.stopPropagation()}
variant="primary"
style={{ fontSize: '0.875rem' }}
>
{race.leagueName}
{/* Arrow */}
);
})}
))}
);
}