import type { LiveStreamData } from '../../types' import type { LiveTimingRow } from '../../lib/live' import { extrapolateClock, liveSessionDisplay } from '../../lib/live' import { WeatherStrip } from './WeatherStrip' interface Props { isLive: boolean isArchive?: boolean snapshot: LiveStreamData rows: LiveTimingRow[] connection: 'connected' | 'connecting' | 'disconnected' | 'error' now: number } export function SessionBanner({ isLive, isArchive = false, snapshot, rows, connection, now }: Props) { const session = snapshot.Session const clock = extrapolateClock(snapshot.Clock, snapshot.ClockRefTime, snapshot.ClockExtrapolating, now) const display = liveSessionDisplay(session, rows) const atRiskLabel = display.atRiskStart && display.atRiskEnd ? `P${display.atRiskStart}-P${display.atRiskEnd} at risk` : '' const stateLabel = isLive ? 'live' : isArchive ? 'archive' : 'stale' return (
{connection}

{session?.MeetingName || 'Live Timing'}

{[session?.SessionName, session?.CircuitName].filter(Boolean).join(' ยท ') || 'F1 live feed'}

{display.phaseLabel && {display.phaseLabel}}
{clock || '--:--:--'}
{display.advanceCount && {display.advanceCount} advance} {atRiskLabel && {atRiskLabel}} L{snapshot.CurrentLap || '-'}/{snapshot.TotalLaps || '-'} {stateLabel}
) }