"use client"; import { useState, useRef, useEffect } from "react"; interface AudioPlayerProps { url: string; duration?: number; className?: string; } export function AudioPlayer({ url, duration, className = "" }: AudioPlayerProps) { const audioRef = useRef(null); const [isPlaying, setIsPlaying] = useState(false); const [currentTime, setCurrentTime] = useState(0); const [audioDuration, setAudioDuration] = useState(duration || 0); const [volume, setVolume] = useState(1); const [isLoaded, setIsLoaded] = useState(false); useEffect(() => { const audio = audioRef.current; if (!audio) return; const handleTimeUpdate = () => setCurrentTime(audio.currentTime); const handleLoadedMetadata = () => { setAudioDuration(audio.duration); setIsLoaded(true); }; const handleEnded = () => setIsPlaying(false); const handlePlay = () => setIsPlaying(true); const handlePause = () => setIsPlaying(false); audio.addEventListener("timeupdate", handleTimeUpdate); audio.addEventListener("loadedmetadata", handleLoadedMetadata); audio.addEventListener("ended", handleEnded); audio.addEventListener("play", handlePlay); audio.addEventListener("pause", handlePause); return () => { audio.removeEventListener("timeupdate", handleTimeUpdate); audio.removeEventListener("loadedmetadata", handleLoadedMetadata); audio.removeEventListener("ended", handleEnded); audio.removeEventListener("play", handlePlay); audio.removeEventListener("pause", handlePause); }; }, []); const togglePlay = () => { const audio = audioRef.current; if (!audio) return; if (isPlaying) { audio.pause(); } else { audio.play(); } }; const handleSeek = (e: React.ChangeEvent) => { const audio = audioRef.current; if (!audio) return; const newTime = parseFloat(e.target.value); audio.currentTime = newTime; setCurrentTime(newTime); }; const handleVolumeChange = (e: React.ChangeEvent) => { const audio = audioRef.current; if (!audio) return; const newVolume = parseFloat(e.target.value); audio.volume = newVolume; setVolume(newVolume); }; const formatTime = (time: number) => { if (isNaN(time)) return "0:00"; const minutes = Math.floor(time / 60); const seconds = Math.floor(time % 60); return `${minutes}:${seconds.toString().padStart(2, "0")}`; }; const progress = audioDuration ? (currentTime / audioDuration) * 100 : 0; return (