"use client"; import { useState, useEffect } from "react"; import { useAuth } from "@/components/AuthProvider"; import { BingoCard } from "@/components/BingoCard"; import { useParams, useRouter } from "next/navigation"; type Campaign = { id: string; name: string; gridSize: number; status: string; }; type GridCell = { index: number; item: Item | null; marked: boolean; markedBy: string[]; markCount: number; }; type Item = { id: string; text: string; emoji: string; soundCategory: string; soundUrl?: string | null; gridIndex: number; }; export default function GamePage() { const { user, loading: authLoading } = useAuth(); const params = useParams(); const router = useRouter(); const [campaign, setCampaign] = useState(null); const [grid, setGrid] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(""); useEffect(() => { if (authLoading) return; if (!user) { router.push("/"); return; } const campaignId = params.campaignId as string; fetch(`/api/game/${campaignId}/state`) .then(r => r.json()) .then(data => { if (data.error) { setError(data.error); return; } setCampaign(data.campaign); setGrid(data.grid); }) .catch(() => setError("Failed to load game state")) .finally(() => setLoading(false)); }, [user, authLoading, params.campaignId, router]); if (authLoading || loading) { return (
🔄
Loading submarine systems...
); } if (error || !campaign) { return (
💀

Campaign Lost

{error || "Campaign not found"}

); } return (
); }