"use client"; import { useI18n } from "@/components/I18nProvider"; import { useRef, useState } from "react"; import Link from "next/link"; import { useRouter } from "next/navigation"; import { ArrowRight, Timer, ZoomIn, Users } from "lucide-react"; import { difficulties, type Difficulty } from "@/shared/protocol"; import { api } from "@/lib/client-api"; export { api } from "@/lib/client-api"; export function StartGame({ datasetId, hostName, }: { datasetId: string; hostName: string | null; }) { const { t } = useI18n(); const [difficulty, setDifficulty] = useState("normal"), [mode, setMode] = useState<"solo" | "multiplayer">("solo"), [playerLimit, setPlayerLimit] = useState(4), [loading, setLoading] = useState(false), [error, setError] = useState(""); const router = useRouter(); const starting = useRef(false); async function start() { if (starting.current) return; starting.current = true; setLoading(true); setError(""); try { const session = await api<{ id: string }>( mode === "solo" ? "sessions" : "rooms", { datasetId, difficulty, ...(mode === "multiplayer" ? { playerLimit } : {}), }, ); router.push((mode === "solo" ? "/play/" : "/multiplayer/") + session.id); } catch (e) { starting.current = false; setError((e as Error).message); setLoading(false); } } return (
{t("YOUR EXPEDITION")}

{t("Choose your challenge.")}

{Object.entries(difficulties).map(([key, value]) => ( ))}

{t("5 rounds · 25,000 possible points · No movement")}

{mode === "multiplayer" && (
{hostName ? (

{t("Host display name")}: {hostName}

) : (

{t("Log in to create a multiplayer room")}{" "} {t("Log in")}

)}

{t( "Create a room, share the invite link, and start when your friends arrive.", )}

)} {error && (

{t(error)}

)}
); }