import React, { useState, useEffect } from 'react'; import { HashRouter, Routes, Route, useNavigate } from 'react-router-dom'; import PlayerView from './components/PlayerView'; import AdminDashboard from './components/AdminDashboard'; import SpectatorView from './components/SpectatorView'; import { GameData, GameState, UserRole } from './types'; import { api } from './services/api'; const INITIAL_GAME_DATA: GameData = { id: 'game-123', name: 'Trivia Night 2024', state: GameState.LOBBY, currentQuestionIndex: 0, questions: [ { id: 'q1', text: 'What is the capital of France?', answer: 'Paris', points: 100 }, { id: 'q2', text: 'Which planet is known as the Red Planet?', answer: 'Mars', points: 150 }, { id: 'q3', text: 'Who wrote "Romeo and Juliet"?', answer: 'William Shakespeare', points: 200 }, ], players: [], teams: [], activeBuzzerQueue: [], countdownValue: 3, }; const App: React.FC = () => { const [game, setGame] = useState(() => { const saved = localStorage.getItem(`game_${INITIAL_GAME_DATA.id}`); return saved ? JSON.parse(saved) : INITIAL_GAME_DATA; }); const [currentUser, setCurrentUser] = useState(null); const [isSynced, setIsSynced] = useState(false); const [useLocal, setUseLocal] = useState(false); useEffect(() => { const interval = setInterval(async () => { try { const data = await api.getGameStatus(game.id); if (data) { setGame(prev => ({ ...prev, ...data })); setIsSynced(true); setUseLocal(false); } else { setIsSynced(false); setUseLocal(true); } } catch (e) { setIsSynced(false); setUseLocal(true); } }, 3000); return () => clearInterval(interval); }, [game.id]); const updateGame = async (newData: Partial) => { const updated = { ...game, ...newData }; setGame(updated); // This updates localStorage internally and attempts the API call await api.updateGameState(game.id, newData); }; return (
} /> } /> } /> } />
{isSynced ? 'Container Synced' : useLocal ? 'Local Cache Mode' : 'Connecting...'}
); }; const Home: React.FC = () => { const navigate = useNavigate(); return (
BUZZMASTER // SYSTEM_DOCKER_V1

BUZZMASTER PRO

ENTERPRISE
navigate('/admin')} /> navigate('/player')} /> navigate('/spectator')} />
DOCKER_SERVICE_DISCOVERY: ENABLED | DB_DRIVER: MARIADB_10.11 | PERSISTENCE_STRATEGY: HYBRID_LOCAL_REMOTE
); }; const RoleCard: React.FC<{ title: string; desc: string; node: string; color: string; onClick: () => void }> = ({ title, desc, node, color, onClick }) => ( ); export default App;