"use client"; import { Dispatch, SetStateAction } from "react"; import { Session } from "next-auth"; import type { Screen } from "../../lib/types"; import type { useSoloGame } from "../../lib/useSoloGame"; import type { useMultiGame } from "../../lib/useMultiGame"; import type { useGameHandlers } from "../../lib/useGameHandlers"; import { fmt } from "../../lib/utils"; import { HomeScreen } from "./HomeScreen"; import { LobbyScreen } from "./LobbyScreen"; import { SoloScreen } from "./SoloScreen"; import { GameScreen } from "./GameScreen"; import { AuthModal } from "./AuthModal"; import { ProfileScreen } from "./ProfileScreen"; import { LeaderboardScreen } from "./LeaderboardScreen"; import { DailyScreen } from "./DailyScreen"; import { BlitzScreen } from "./BlitzScreen"; type Props = { screen: Screen; setScreen: Dispatch>; session: Session | null; solo: ReturnType; multi: ReturnType; handlers: ReturnType; playerName: string; setPlayerName: Dispatch>; joinCode: string; setJoinCode: Dispatch>; maxPlayers: number; setMaxPlayers: Dispatch>; totalRounds: number; setTotalRounds: Dispatch>; gameMode: "race" | "all_finish"; setGameMode: Dispatch>; error: string | null; setError: Dispatch>; loading: boolean; showAuth: boolean; setShowAuth: Dispatch>; }; export function ScreenRouter({ screen, setScreen, session, solo, multi, handlers, playerName, setPlayerName, joinCode, setJoinCode, maxPlayers, setMaxPlayers, totalRounds, setTotalRounds, gameMode, setGameMode, error, setError, loading, showAuth, setShowAuth, }: Props) { if (screen === "profile") return ( setScreen("home")} /> ); if (screen === "leaderboard") return setScreen("home")} />; if (screen === "daily") return ( setScreen("home")} currentUserId={session?.user?.id ?? undefined} /> ); if (screen === "blitz") return setScreen("home")} />; if (screen === "home") return ( <> setShowAuth(true)} onShowProfile={() => setScreen("profile")} onShowLeaderboard={() => setScreen("leaderboard")} onDaily={() => setScreen("daily")} onBlitz={() => setScreen("blitz")} /> {showAuth && ( setShowAuth(false)} onSuccess={() => setShowAuth(false)} /> )} ); if (screen === "solo") return ( { solo.reset(); setScreen("home"); }} onNewGame={solo.start} onRetry={solo.retryLoad} /> ); if (screen === "lobby" && multi.room && multi.playerId) return ( multi.setSearchAllowed(v)} onSetTimeLimit={(v) => multi.setTimeLimit(v)} /> ); if (screen === "game" && multi.room && multi.playerId) return ( ); return null; }