import React, { useState, useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; import { useAuth } from '../context/AuthContext'; import api from '../api/axios'; function Picker() { const { isAuthenticated } = useAuth(); const navigate = useNavigate(); const [activeSession, setActiveSession] = useState(null); const [allGames, setAllGames] = useState([]); const [selectedGame, setSelectedGame] = useState(null); const [loading, setLoading] = useState(true); const [picking, setPicking] = useState(false); const [error, setError] = useState(''); // Filters const [playerCount, setPlayerCount] = useState(''); const [drawingFilter, setDrawingFilter] = useState('both'); const [lengthFilter, setLengthFilter] = useState(''); const [familyFriendlyFilter, setFamilyFriendlyFilter] = useState(''); // Manual game selection const [showManualSelect, setShowManualSelect] = useState(false); const [manualGameId, setManualGameId] = useState(''); useEffect(() => { if (!isAuthenticated) { navigate('/login'); return; } loadData(); }, [isAuthenticated, navigate]); const loadData = async () => { try { // Load active session or create one try { const sessionResponse = await api.get('/sessions/active'); setActiveSession(sessionResponse.data); } catch (err) { // No active session, create one const newSession = await api.post('/sessions', {}); setActiveSession(newSession.data); } // Load all games for manual selection const gamesResponse = await api.get('/games'); setAllGames(gamesResponse.data); } catch (err) { setError('Failed to load session data'); } finally { setLoading(false); } }; const handlePickGame = async () => { if (!activeSession) return; setPicking(true); setError(''); try { const response = await api.post('/pick', { sessionId: activeSession.id, playerCount: playerCount ? parseInt(playerCount) : undefined, drawing: drawingFilter !== 'both' ? drawingFilter : undefined, length: lengthFilter || undefined, familyFriendly: familyFriendlyFilter ? familyFriendlyFilter === 'yes' : undefined }); setSelectedGame(response.data.game); } catch (err) { setError(err.response?.data?.error || 'Failed to pick a game'); setSelectedGame(null); } finally { setPicking(false); } }; const handleAcceptGame = async () => { if (!selectedGame || !activeSession) return; try { await api.post(`/sessions/${activeSession.id}/games`, { game_id: selectedGame.id, manually_added: false }); // Reload data await loadData(); setSelectedGame(null); setError(''); } catch (err) { setError('Failed to add game to session'); } }; const handleAddManualGame = async () => { if (!manualGameId || !activeSession) return; try { await api.post(`/sessions/${activeSession.id}/games`, { game_id: parseInt(manualGameId), manually_added: true }); // Reload data await loadData(); setManualGameId(''); setShowManualSelect(false); setError(''); } catch (err) { setError('Failed to add game to session'); } }; if (loading) { return (
{selectedGame.pack_name}
Loading...
) : games.length === 0 ? (No games played yet. Pick a game to get started!
) : (