'use client'; import { useState, useRef, useEffect } from 'react'; import type { AudioPlayerProps } from '@/types/component-props'; export default function AudioPlayer({ audioUrl, duration, onPlayPause, onSeek, }: AudioPlayerProps) { const [isPlaying, setIsPlaying] = useState(false); const [currentTime, setCurrentTime] = useState(0); const audioRef = useRef(null); useEffect(() => { const audio = audioRef.current; if (!audio) return; const handleTimeUpdate = () => { setCurrentTime(audio.currentTime); }; const handleEnded = () => { setIsPlaying(false); onPlayPause?.(false); }; audio.addEventListener('timeupdate', handleTimeUpdate); audio.addEventListener('ended', handleEnded); return () => { audio.removeEventListener('timeupdate', handleTimeUpdate); audio.removeEventListener('ended', handleEnded); }; }, [onPlayPause]); const handlePlayPause = () => { const audio = audioRef.current; if (!audio) return; if (isPlaying) { audio.pause(); } else { audio.play(); } setIsPlaying(!isPlaying); onPlayPause?.(!isPlaying); }; const handleSeek = (e: React.ChangeEvent) => { const audio = audioRef.current; if (!audio) return; const newTime = parseFloat(e.target.value); audio.currentTime = newTime; setCurrentTime(newTime); onSeek?.(newTime); }; const formatTime = (seconds: number) => { const mins = Math.floor(seconds / 60); const secs = Math.floor(seconds % 60); return `${mins}:${secs.toString().padStart(2, '0')}`; }; return (
); }