'use client'; import { useEffect, useRef, useState } from 'react'; import { Loader2, Pause, Play } from 'lucide-react'; import { cn } from '@/lib/utils'; function formatDuration(seconds: number) { if (!Number.isFinite(seconds) || seconds <= 0) return '0:00'; const whole = Math.floor(seconds); const mins = Math.floor(whole / 60); const secs = whole % 60; return `${mins}:${secs.toString().padStart(2, '0')}`; } export function ChatVideoNotePlayer({ src, durationMs, variant = 'theirs' }: { src: string; durationMs?: number; variant?: 'mine' | 'theirs'; }) { const videoRef = useRef(null); const [playing, setPlaying] = useState(false); const [loading, setLoading] = useState(true); const [duration, setDuration] = useState(durationMs ? durationMs / 1000 : 0); useEffect(() => { const video = videoRef.current; if (!video) return; const onLoaded = () => { if (Number.isFinite(video.duration) && video.duration > 0) { setDuration(video.duration); } setLoading(false); }; const onPlay = () => setPlaying(true); const onPause = () => setPlaying(false); const onEnded = () => setPlaying(false); video.addEventListener('loadedmetadata', onLoaded); video.addEventListener('play', onPlay); video.addEventListener('pause', onPause); video.addEventListener('ended', onEnded); return () => { video.removeEventListener('loadedmetadata', onLoaded); video.removeEventListener('play', onPlay); video.removeEventListener('pause', onPause); video.removeEventListener('ended', onEnded); }; }, [src]); function togglePlayback() { const video = videoRef.current; if (!video) return; if (video.paused) { void video.play(); } else { video.pause(); } } return ( ); }