"use client" import { useState, useRef, useEffect } from "react" import { Button } from "@/components/ui/button" import { Play, Pause, Volume2, VolumeX, Loader2, RefreshCw, AlertCircle, FileAudio } from "lucide-react" import { Slider } from "@/components/ui/slider" import { formatDuration } from "./media-api" interface AudioPreviewProps { src: string filename?: string transcript?: string className?: string showTranscript?: boolean } export function AudioPreview({ src, filename, transcript, className = "", showTranscript = true }: AudioPreviewProps) { const audioRef = useRef(null) const [isPlaying, setIsPlaying] = useState(false) const [isMuted, setIsMuted] = useState(false) const [currentTime, setCurrentTime] = useState(0) const [duration, setDuration] = useState(0) const [isLoading, setIsLoading] = useState(true) const [error, setError] = useState(false) const [volume, setVolume] = useState(1) const [showVolumeSlider, setShowVolumeSlider] = useState(false) useEffect(() => { const audio = audioRef.current if (!audio) return const handleLoadedMetadata = () => { setDuration(audio.duration) setIsLoading(false) } const handleTimeUpdate = () => { setCurrentTime(audio.currentTime) } const handleEnded = () => { setIsPlaying(false) setCurrentTime(0) } const handleError = () => { setError(true) setIsLoading(false) } const handleCanPlay = () => { setIsLoading(false) } audio.addEventListener("loadedmetadata", handleLoadedMetadata) audio.addEventListener("timeupdate", handleTimeUpdate) audio.addEventListener("ended", handleEnded) audio.addEventListener("error", handleError) audio.addEventListener("canplay", handleCanPlay) return () => { audio.removeEventListener("loadedmetadata", handleLoadedMetadata) audio.removeEventListener("timeupdate", handleTimeUpdate) audio.removeEventListener("ended", handleEnded) audio.removeEventListener("error", handleError) audio.removeEventListener("canplay", handleCanPlay) } }, [src]) const togglePlay = () => { const audio = audioRef.current if (!audio) return if (isPlaying) { audio.pause() } else { audio.play() } setIsPlaying(!isPlaying) } const toggleMute = () => { const audio = audioRef.current if (!audio) return audio.muted = !isMuted setIsMuted(!isMuted) } const handleSeek = (value: number[]) => { const audio = audioRef.current if (!audio) return audio.currentTime = value[0] setCurrentTime(value[0]) } const handleVolumeChange = (value: number[]) => { const audio = audioRef.current if (!audio) return const newVolume = value[0] audio.volume = newVolume setVolume(newVolume) setIsMuted(newVolume === 0) } const handleRetry = () => { setError(false) setIsLoading(true) const audio = audioRef.current if (audio) { audio.load() } } if (error) { return (

Failed to load audio

) } return (
) }