"use client"; import { useRef, useEffect } from "react"; import { Button } from "./button"; import { Play, Pause, Volume2 } from "lucide-react"; import { usePlaybackStore } from "@/stores/playback-store"; interface VideoPlayerProps { src: string; poster?: string; className?: string; } export function VideoPlayer({ src, poster, className = "" }: VideoPlayerProps) { const videoRef = useRef(null); const { isPlaying, currentTime, volume, play, pause, setVolume, setDuration, setCurrentTime } = usePlaybackStore(); useEffect(() => { const video = videoRef.current; if (!video) return; const handleTimeUpdate = () => { setCurrentTime(video.currentTime); }; const handleLoadedMetadata = () => { setDuration(video.duration); }; const handleSeekEvent = (e: CustomEvent) => { video.currentTime = e.detail.time; }; video.addEventListener("timeupdate", handleTimeUpdate); video.addEventListener("loadedmetadata", handleLoadedMetadata); window.addEventListener("playback-seek", handleSeekEvent as EventListener); return () => { video.removeEventListener("timeupdate", handleTimeUpdate); video.removeEventListener("loadedmetadata", handleLoadedMetadata); window.removeEventListener("playback-seek", handleSeekEvent as EventListener); }; }, [setCurrentTime, setDuration]); useEffect(() => { const video = videoRef.current; if (!video) return; if (isPlaying) { video.play().catch(console.error); } else { video.pause(); } }, [isPlaying]); useEffect(() => { const video = videoRef.current; if (!video) return; video.volume = volume; }, [volume]); const handleSeek = (e: React.MouseEvent) => { const video = videoRef.current; if (!video) return; const rect = video.getBoundingClientRect(); const x = e.clientX - rect.left; const percentage = x / rect.width; const newTime = percentage * video.duration; video.currentTime = newTime; setCurrentTime(newTime); }; return (