"use client"; import { useI18n } from "@/components/I18nProvider"; import { useState } from "react"; 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 }: { datasetId: string }) { const { t } = useI18n(); const [difficulty, setDifficulty] = useState("normal"), [mode, setMode] = useState<"solo" | "multiplayer">("solo"), [displayName, setDisplayName] = useState(""), [playerLimit, setPlayerLimit] = useState(4), [loading, setLoading] = useState(false), [error, setError] = useState(""); const router = useRouter(); async function start() { setLoading(true); setError(""); try { const session = await api<{ id: string }>( mode === "solo" ? "sessions" : "rooms", { datasetId, difficulty, ...(mode === "multiplayer" ? { displayName, playerLimit } : {}), }, ); router.push((mode === "solo" ? "/play/" : "/multiplayer/") + session.id); } catch (e) { 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" && (
setDisplayName(event.target.value)} minLength={2} maxLength={32} placeholder={t("Enter a player name")} autoComplete="nickname" disabled={loading} />

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

)} {error && (

{t(error)}

)}
); }