import { useCallback, useEffect } from 'react'; interface UseFullscreenControlsProps { containerRef: React.RefObject; videoRef: React.RefObject; isFullscreen: boolean; setIsFullscreen: (fullscreen: boolean) => void; isPiPSupported: boolean; isAirPlaySupported: boolean; setIsPiPSupported: (supported: boolean) => void; setIsAirPlaySupported: (supported: boolean) => void; } export function useFullscreenControls({ containerRef, videoRef, isFullscreen, setIsFullscreen, isPiPSupported, isAirPlaySupported, setIsPiPSupported, setIsAirPlaySupported }: UseFullscreenControlsProps) { useEffect(() => { if (typeof document !== 'undefined') { setIsPiPSupported('pictureInPictureEnabled' in document); } if (typeof window !== 'undefined') { setIsAirPlaySupported('WebKitPlaybackTargetAvailabilityEvent' in window); } }, [setIsPiPSupported, setIsAirPlaySupported]); const toggleFullscreen = useCallback(() => { if (!containerRef.current) return; if (!isFullscreen) { if (containerRef.current.requestFullscreen) { containerRef.current.requestFullscreen(); } } else { if (document.exitFullscreen) { document.exitFullscreen(); } } }, [containerRef, isFullscreen]); useEffect(() => { const handleFullscreenChange = () => { setIsFullscreen(!!document.fullscreenElement); }; document.addEventListener('fullscreenchange', handleFullscreenChange); return () => document.removeEventListener('fullscreenchange', handleFullscreenChange); }, [setIsFullscreen]); const togglePictureInPicture = useCallback(async () => { if (!videoRef.current || !isPiPSupported) return; try { if (document.pictureInPictureElement) { await document.exitPictureInPicture(); } else { await videoRef.current.requestPictureInPicture(); } } catch (error) { console.error('Failed to toggle Picture-in-Picture:', error); } }, [videoRef, isPiPSupported]); const showAirPlayMenu = useCallback(() => { if (!videoRef.current || !isAirPlaySupported) return; const video = videoRef.current as any; if (video.webkitShowPlaybackTargetPicker) { video.webkitShowPlaybackTargetPicker(); } }, [videoRef, isAirPlaySupported]); return { toggleFullscreen, togglePictureInPicture, showAirPlayMenu }; }