// components/live/LiveSessionClient.tsx 'use client'; import { useLiveTelemetry } from '@/hooks/useLiveTelemetry'; import LiveTrackMap from '@/components/live/LiveTrackMap'; import LiveTiming from '@/components/live/LiveTiming'; import { MapPinIcon, UsersIcon, SettingsIcon, LiveDotIcon } from '@/components/ui/icons'; import { cleanTrackName, cleanTrackConfig } from '@/lib/trackUtils'; interface LiveSessionClientProps { serverId: number; serverName: string; serverTrack: string; serverConfig: string; connectedPlayers: number; initialCars: any[]; } export default function LiveSessionClient({ serverId, serverName, serverTrack, serverConfig, connectedPlayers, initialCars, }: LiveSessionClientProps) { const { telemetry, connected, error } = useLiveTelemetry(serverId); // Use live telemetry if available, otherwise use initial data const cars = telemetry.length > 0 ? telemetry : initialCars; return (
{/* Server Header */}

{serverName}

{cleanTrackName(serverTrack)}
{serverConfig && (
{cleanTrackConfig(serverConfig)}
)}
{connectedPlayers} drivers
{connected ? 'LIVE' : error ? 'OFFLINE' : 'CONNECTING'}
{/* Main Content Grid */}
{/* Left: Timing Board (3 columns) */}

LIVE TIMING

{connected && (
Updates: {telemetry.length} cars
)}
{/* Right: Track Map (2 columns) */}
{/* Session Info */}

SESSION INFO

Drivers: {connectedPlayers}
Track: {cleanTrackName(serverTrack)}
{serverConfig && (
Layout: {cleanTrackConfig(serverConfig)}
)}
Stream: {connected ? 'Connected' : 'Offline'}
); }