import React, { useState } from 'react'; interface Props { videoId: string; onConversionDone: () => void; } export default function HlsConversionStatus({ videoId, onConversionDone }: Props) { const [status, setStatus] = useState<'idle' | 'converting' | 'done' | 'error'>('idle'); const [percent, setPercent] = useState(0); const startConversion = async () => { setStatus('converting'); await fetch(`/api/hls/${videoId}/convert`, { method: 'POST' }); const es = new EventSource(`/api/hls/${videoId}/progress`); es.onmessage = (e) => { try { const data = JSON.parse(e.data); setPercent(Math.round(data.percent ?? 0)); setStatus(data.status); if (data.status === 'done') { es.close(); onConversionDone(); } else if (data.status === 'error') { es.close(); } } catch { // ignore parse errors } }; es.onerror = () => { es.close(); setStatus('error'); }; }; return (