import React, { useState, useEffect } from "react" import { motion, AnimatePresence } from "framer-motion" /** * JokerApprovalModal - Gamemaster felület a Joker kártya feladatok jóváhagyására * * @param {Object} props * @param {boolean} props.isOpen - Modal megjelenítése * @param {Function} props.onClose - Modal bezárása * @param {Object} props.jokerRequest - Joker kártya adatok * @param {Function} props.onApprove - Jóváhagyás callback * @param {Function} props.onReject - Elutasítás callback * @param {string} props.playerName - Játékos neve * @param {string} props.playerEmoji - Játékos emoji * @param {number} props.timeLimit - Időkorlát másodpercben (default: 120) */ const JokerApprovalModal = ({ isOpen, onClose, jokerRequest, onApprove, onReject, playerName, playerEmoji = "🎭", timeLimit = 120 }) => { const [isProcessing, setIsProcessing] = useState(false) const [timeLeft, setTimeLeft] = useState(timeLimit) // Timer countdown useEffect(() => { if (!isOpen) 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]) const handleTimeout = () => { // Auto-reject on timeout if (onReject && !isProcessing) { handleReject() } } const formatTime = (seconds) => { const mins = Math.floor(seconds / 60) const secs = seconds % 60 return `${mins}:${secs.toString().padStart(2, '0')}` } const getTimeColor = () => { if (timeLeft > 60) return "text-green-400" if (timeLeft > 30) return "text-yellow-400" return "text-red-400 animate-pulse" } const handleApprove = async () => { setIsProcessing(true) try { await onApprove(jokerRequest) onClose() } catch (error) { console.error("Jóváhagyási hiba:", error) } finally { setIsProcessing(false) } } const handleReject = async () => { setIsProcessing(true) try { await onReject(jokerRequest) onClose() } catch (error) { console.error("Elutasítási hiba:", error) } finally { setIsProcessing(false) } } if (!isOpen) return null return ( {isOpen && (
{/* Backdrop */} {/* Modal Content */} {/* Header with Joker theme */}
🃏

Joker Kártya Feladat

Gamemaster jóváhagyás szükséges

{/* Timer */}
⏱️ {formatTime(timeLeft)}
{/* Content */}
{/* Player Info */}
{playerEmoji}

Játékos

{playerName}

{/* Joker Card Details */}
🎯

Feladat címe

{jokerRequest?.cardTitle || "Joker Kártya Feladat"}

📝

Feladat leírása

{jokerRequest?.cardDescription || "A játékosnak teljesítenie kell a Joker kártya feladatát."}

{/* Points Info */} {jokerRequest?.points && (
{jokerRequest.points} pont járható érte
)}
{/* Player's Claim (Optional - ha később hozzáadod) */} {jokerRequest?.playerMessage && (
💬

Játékos üzenete

"{jokerRequest.playerMessage}"

)} {/* Instructions */}
ℹ️

Gamemaster döntés: Nézd meg, hogy a játékos teljesítette-e a feladatot, majd hagyd jóvá vagy utasítsd el.

{/* Action Buttons */}
{/* Processing indicator */} {isProcessing && (
⚙️
Feldolgozás...
)}
)} ) } export default JokerApprovalModal