import React, { useState } from 'react'; import { GameData, GameState, Player } from '../types'; interface PlayerViewProps { game: GameData; updateGame: (data: Partial) => void; currentUser: Player | null; setCurrentUser: (p: Player) => void; } const PlayerView: React.FC = ({ game, updateGame, currentUser, setCurrentUser }) => { const [name, setName] = useState(''); const [teamName, setTeamName] = useState(''); const handleJoin = (e: React.FormEvent) => { e.preventDefault(); if (!name || !teamName) return; const newPlayer: Player = { id: Math.random().toString(36).substr(2, 9), name, teamId: teamName, // Simplified team logic status: 'PENDING', score: 0, correctAnswers: 0, wrongAnswers: 0, avgBuzzerMs: 0 }; setCurrentUser(newPlayer); updateGame({ players: [...game.players, newPlayer] }); }; const handleBuzz = () => { if (!currentUser || game.state !== GameState.QUESTION) return; const timestamp = Date.now(); const alreadyBuzzed = game.activeBuzzerQueue.some(b => b.playerId === currentUser.id); if (!alreadyBuzzed) { updateGame({ state: GameState.BUZZED, activeBuzzerQueue: [...game.activeBuzzerQueue, { playerId: currentUser.id, timestamp }] }); } }; if (!currentUser) { return (

Join the Game

setName(e.target.value)} className="w-full p-4 bg-white/5 border border-white/10 rounded-xl focus:ring-2 focus:ring-blue-500 outline-none" placeholder="e.g. John Doe" />
setTeamName(e.target.value)} className="w-full p-4 bg-white/5 border border-white/10 rounded-xl focus:ring-2 focus:ring-blue-500 outline-none" placeholder="e.g. The Nerds" />
); } if (currentUser.status === 'PENDING') { return (

Waiting for Host...

Hang tight, {currentUser.name}! The host will approve you shortly.

); } const isFirst = game.activeBuzzerQueue[0]?.playerId === currentUser.id; const hasBuzzed = game.activeBuzzerQueue.some(b => b.playerId === currentUser.id); return (
{currentUser.name}
{teamName}
{game.state === GameState.LOBBY && (
Game will start soon...
)} {game.state === GameState.COUNTDOWN && (
{game.countdownValue}
)} {game.state === GameState.QUESTION && ( )} {game.state === GameState.BUZZED && (
{isFirst ? 'YOUR TURN!' : hasBuzzed ? 'LOCKED' : 'WAITING'}
)} {(game.state === GameState.REVEAL || game.state === GameState.SCOREBOARD) && (

Well Played!

Get ready for the next one.

)}
Lat: ~15ms
); }; export default PlayerView;