"use client"; import { useCallback, useEffect, useState } from "react"; import type { RadioStats } from "@/app/(frontend)/minigames/radio/actions"; import { isRadioUnlocked, SPRINT_ACCURACY_REQUIREMENT, WATCH_ACCURACY_REQUIREMENT, } from "@/lib/minigames/custom/radio"; import { useRealtimePresence } from "@/hooks/useRealtimePresence"; import { UnlockNotice } from "@/components/frontend/minigames/UnlockNotice"; import { UgcLinkButton } from "@/components/frontend/minigames/UgcLinkButton"; import { RadioLeaderboard } from "./RadioLeaderboard"; import { RadioTraffic } from "./RadioTraffic"; export function RadioArena({ initialStats, currentUserId, }: { initialStats: RadioStats; currentUserId: number | string; }) { const [refreshKey, setRefreshKey] = useState(0); const [playing, setPlaying] = useState(false); const [mode, setMode] = useState<"sprint" | "watch">("sprint"); const [modeHydrated, setModeHydrated] = useState(false); const activeOperators = useRealtimePresence("radio", playing, true); const onPhaseChange = useCallback((phase: "ready" | "playing" | "over") => { setPlaying(phase === "playing"); }, []); const customUnlocked = isRadioUnlocked({ sprintBestAccuracy: initialStats.sprintBestAccuracy, watchBestAccuracy: initialStats.watchBestAccuracy, }); const sprintPercent = Math.round(initialStats.sprintBestAccuracy * 100); const watchPercent = Math.round(initialStats.watchBestAccuracy * 100); useEffect(() => { const savedMode = window.localStorage.getItem("radio-traffic-mode"); if (savedMode === "sprint" || savedMode === "watch") setMode(savedMode); setModeHydrated(true); }, []); useEffect(() => { if (modeHydrated) window.localStorage.setItem("radio-traffic-mode", mode); }, [mode, modeHydrated]); return (