'use client'; import { useEffect, useRef, useState } from 'react'; import { usePlayerStore } from '@/store/usePlayerStore'; import { Play, Pause, Volume2, VolumeX, Radio, Music, Maximize2, Minimize2, Video, X } from 'lucide-react'; import { StreamOverlays } from './StreamOverlays'; import videojs from 'video.js'; import 'video.js/dist/video-js.css'; export const GlobalPlayer = () => { const { audioUrl, isAudioPlaying, audioVolume, toggleAudio, setAudioVolume, isVideoActive, videoUrl, setVideoActive } = usePlayerStore(); const audioRef = useRef(null); const videoRef = useRef(null); const playerRef = useRef(null); const [isMuted, setIsMuted] = useState(false); const [lastVolume, setLastVolume] = useState(audioVolume); const [isExpanded, setIsExpanded] = useState(false); // Sync Audio State useEffect(() => { if (!audioRef.current) return; if (isAudioPlaying) { audioRef.current.play().catch(e => { console.error("Audio playback error:", e); toggleAudio(false); }); } else { audioRef.current.pause(); } }, [isAudioPlaying, audioUrl, toggleAudio]); // Handle Video Player Initialization useEffect(() => { if (isVideoActive && videoRef.current && !playerRef.current) { const videoElement = document.createElement('video-js'); videoElement.classList.add('vjs-big-play-centered', 'vjs-almeira'); videoRef.current.appendChild(videoElement); const player = playerRef.current = videojs(videoElement, { autoplay: true, controls: true, responsive: true, fluid: true, sources: [{ src: videoUrl || 'https://demo.unified-streaming.com/k8s/features/stable/video/tears-of-steel/tears-of-steel.ism/.m3u8', // Fallback para test type: 'application/x-mpegURL' }] }); // Cuando el video está activo, bajamos el volumen de la radio if (isAudioPlaying) setAudioVolume(0.1); } return () => { if (playerRef.current) { playerRef.current.dispose(); playerRef.current = null; } }; }, [isVideoActive, videoUrl]); // Sync Volume useEffect(() => { if (audioRef.current) { audioRef.current.volume = isMuted ? 0 : audioVolume; } }, [audioVolume, isMuted]); const handleToggleMute = () => { if (isMuted) { setIsMuted(false); setAudioVolume(lastVolume); } else { setLastVolume(audioVolume); setIsMuted(true); setAudioVolume(0); } }; return ( <> {/* Hidden Audio Element */}