import React, { useState, useEffect } from "react" import { motion, AnimatePresence } from "framer-motion" /** * CardDisplayModal - Kártya megjelenítése a játékos számára * * @param {Object} props * @param {boolean} props.isOpen - Modal megjelenítése * @param {Function} props.onClose - Modal bezárása * @param {Object} props.card - Kártya adatok * @param {string} props.cardType - Kártya típusa (QUESTION, LUCK, JOKER) * @param {Function} props.onSubmitAnswer - Válasz beküldése (csak QUESTION típusnál) * @param {number} props.timeLimit - Időkorlát másodpercben (default: 60) */ const CardDisplayModal = ({ isOpen, onClose, card, cardType = "QUESTION", onSubmitAnswer, timeLimit = 60 }) => { const [playerAnswer, setPlayerAnswer] = useState("") const [selectedOption, setSelectedOption] = useState(null) const [timeLeft, setTimeLeft] = useState(timeLimit) const [isProcessing, setIsProcessing] = useState(false) // Timer countdown useEffect(() => { if (!isOpen || cardType !== "QUESTION") return setTimeLeft(timeLimit) const timer = setInterval(() => { setTimeLeft(prev => { if (prev <= 1) { clearInterval(timer) handleTimeout() return 0 } return prev - 1 }) }, 1000) return () => clearInterval(timer) }, [isOpen, timeLimit]) // Reset state when modal opens useEffect(() => { if (isOpen) { setPlayerAnswer("") setSelectedOption(null) setIsProcessing(false) } }, [isOpen]) const handleTimeout = () => { if (onSubmitAnswer) { onSubmitAnswer(null) // null = timeout } } const handleSubmit = async () => { if (isProcessing) return let answer = null // Quiz típus - A, B, C, D if (card?.type === 0 || card?.answerOptions) { answer = selectedOption } // Szöveges válasz else { answer = playerAnswer.trim() } if (!answer) return setIsProcessing(true) try { await onSubmitAnswer(answer) } catch (error) { console.error("Válasz küldési hiba:", error) } } const getCardIcon = () => { switch (cardType) { case "QUESTION": return "❓" case "LUCK": return "🍀" case "JOKER": return "🃏" default: return "📝" } } const getCardTitle = () => { switch (cardType) { case "QUESTION": return "Feladat Kártya" case "LUCK": return "Szerencse Kártya" case "JOKER": return "Joker Kártya" default: return "Kártya" } } const getCardBgGradient = () => { switch (cardType) { case "QUESTION": return "from-blue-600 via-purple-600 to-blue-600" case "LUCK": return "from-green-600 via-teal-600 to-green-600" case "JOKER": return "from-purple-600 via-pink-600 to-purple-600" default: return "from-gray-600 via-gray-700 to-gray-600" } } const formatTime = (seconds) => { const mins = Math.floor(seconds / 60) const secs = seconds % 60 return `${mins}:${secs.toString().padStart(2, '0')}` } const getTimeColor = () => { if (timeLeft > 30) return "text-green-400" if (timeLeft > 10) return "text-yellow-400" return "text-red-400 animate-pulse" } if (!isOpen || !card) return null return ( {isOpen && (
{/* Backdrop */} {/* Modal Content */} {/* Header */}
{getCardIcon()}

{getCardTitle()}

{cardType === "QUESTION" && (

Válaszolj a kérdésre!

)}
{/* Timer - csak QUESTION típusnál */} {cardType === "QUESTION" && (
⏱️ {formatTime(timeLeft)}
)}
{/* Content */}
{/* Question/Text */}
📝

{card.question || card.text || card.statement}

{/* Answer Options - Quiz típus (type: 0) */} {cardType === "QUESTION" && (card.type === 0 || card.answerOptions) && (

Válaszd ki a helyes választ:

{card.answerOptions?.map((option, index) => ( ))}
)} {/* Text Input - egyéb kérdés típusok */} {cardType === "QUESTION" && card.type !== 0 && !card.answerOptions && (

Írd be a választ:

setPlayerAnswer(e.target.value)} onKeyPress={(e) => e.key === 'Enter' && handleSubmit()} disabled={isProcessing} placeholder="Válaszod..." className="w-full bg-gray-800 border-2 border-gray-600 rounded-lg px-4 py-3 text-white focus:border-purple-500 focus:outline-none disabled:opacity-50" />
)} {/* Hint (if available) */} {card.hint && (
💡

Segítség

{card.hint}

)} {/* Submit Button - csak QUESTION típusnál */} {cardType === "QUESTION" && ( )} {/* Close Button - LUCK és JOKER típusnál */} {(cardType === "LUCK" || cardType === "JOKER") && ( )}
)} ) } export default CardDisplayModal