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.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 (
)
}
}
return (
{/* Header */}
{question.category}
{question.points} баллов
{timer !== null && (
)}
{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