import { useState, useRef, useEffect } from 'react' function QuestionModal({ question, timer, onSubmitAnswer, answeringTeamName, isHost, onBuzzIn, canBuzzIn, onCloseQuestion, gameCode, socket }) { const [showAnswer, setShowAnswer] = useState(false) const [mediaEnded, setMediaEnded] = useState(false) const audioRef = useRef(null) const videoRef = useRef(null) if (!question) return null const handleMediaEnded = () => { console.log('🎬 Media playback ended'); setMediaEnded(true); if (socket && gameCode) { socket.emit('media-ended', { gameCode }); } } useEffect(() => { setMediaEnded(false); }, [question]) const getMediaUrl = (path) => { if (import.meta.env.VITE_SERVER_URL) return `${import.meta.env.VITE_SERVER_URL}${path}` if (import.meta.env.PROD) return `${window.location.protocol}//${window.location.host}${path}` return `http://localhost:3001${path}` } const timerColor = timer !== null ? timer <= 5 ? 'text-red-400' : timer <= 10 ? 'text-amber-400' : 'text-white' : 'text-white' const timerBg = timer !== null && timer <= 5 ? 'animate-pulse' : '' const renderQuestionContent = () => { const wrapperClass = "bg-gradient-to-br from-indigo-900/40 to-purple-900/40 border border-indigo-400/20 p-4 md:p-8 rounded-xl mb-4 md:mb-6 backdrop-blur-sm" switch (question.type) { case 'image': return (
Question {question.questionText && (

{question.questionText}

)}
) case 'audio': return (
🎵
{isHost ? ( <> {mediaEnded && ( )} ) : (

🔊 Ведущий проигрывает аудио...

)} {question.questionText && (

{question.questionText}

)} {isHost && !mediaEnded && (

⏸️ Таймер начнется после прослушивания

)}
) case 'video': return (
{isHost ? ( <> {mediaEnded && ( )} ) : (

🔊 Ведущий проигрывает видео...

)} {question.questionText && (

{question.questionText}

)} {isHost && !mediaEnded && (

⏸️ Таймер начнется после просмотра

)}
) case 'text': default: return (

{question.question}

) } } return (
{/* Header */}

{question.category}

{question.points} баллов

{timer !== null && (

{timer}

)}
{renderQuestionContent()} {/* Show answer button for host */} {isHost && (
{!showAnswer ? ( ) : (

Правильный ответ:

{question.answer}

)}
)} {/* Buzz-in button for teams */} {canBuzzIn && (
)} {/* Host: who is answering + correct/incorrect buttons */} {isHost && answeringTeamName && (

Отвечает команда:

{answeringTeamName}

)} {/* Host: close question early */} {isHost && !answeringTeamName && (
)} {/* Team view: who is answering */} {!isHost && answeringTeamName && (

Отвечает: {answeringTeamName}

)} {!isHost && !canBuzzIn && !answeringTeamName && (

Ожидание...

)}
) } export default QuestionModal