import { useMemo, useRef, useState } from 'react' import { Pause, Play } from 'lucide-react' import type { LiveDriverInfo, LiveRadioCapture, LiveSessionMeta } from '../../types' import { radioCaptureKey, radioClipUrl } from '../../lib/radio' import { teamColor } from '../../utils' import '../../styles/team-radio.css' interface Props { captures?: LiveRadioCapture[] driverInfo?: Record session?: LiveSessionMeta } function relativeTime(utc: string): string { const timestamp = new Date(utc).getTime() if (!utc || Number.isNaN(timestamp)) return '--' const diffSeconds = Math.max(0, Math.floor((Date.now() - timestamp) / 1000)) if (diffSeconds < 60) return `${diffSeconds}s ago` const minutes = Math.floor(diffSeconds / 60) if (minutes < 60) return `${minutes}m ago` const hours = Math.floor(minutes / 60) if (hours < 24) return `${hours}h ago` return new Date(utc).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }) } function driverLabel(info: LiveDriverInfo | undefined, racingNumber: string): string { return info?.Tla || racingNumber } export function TeamRadioTicker({ captures = [], driverInfo = {}, session }: Props) { const audioRef = useRef(null) const [playingKey, setPlayingKey] = useState(null) const newestFirst = useMemo(() => [...captures].reverse(), [captures]) const toggleCapture = (capture: LiveRadioCapture) => { const key = radioCaptureKey(capture) const audio = audioRef.current const url = radioClipUrl(session, capture) if (!audio || !url) return if (playingKey === key) { audio.pause() setPlayingKey(null) return } audio.pause() audio.src = url setPlayingKey(key) const play = audio.play() if (play) { play.catch(() => setPlayingKey(null)) } } return (
Team Radio {captures.length > 0 && {captures.length} clips}
) }