import { useEffect, useRef, useState } from 'react'; export function useExtractionRunPolling(extractionApi, runId, { intervalMs = 1500 } = {}) { const [run, setRun] = useState(null); const [error, setError] = useState(null); const [isPolling, setIsPolling] = useState(false); const timerRef = useRef(null); useEffect(() => { if (!extractionApi || !runId) { setRun(null); setError(null); setIsPolling(false); if (timerRef.current) { clearInterval(timerRef.current); timerRef.current = null; } return; } let cancelled = false; async function tick() { try { const data = await extractionApi.getRun(runId); if (cancelled) return; setRun(data); setError(null); const status = data?.status; const shouldPoll = status === 'queued' || status === 'running'; setIsPolling(shouldPoll); if (!shouldPoll && timerRef.current) { clearInterval(timerRef.current); timerRef.current = null; } } catch (e) { if (!cancelled) setError(e?.message ?? 'Erro ao consultar run'); } } tick(); timerRef.current = setInterval(tick, intervalMs); return () => { cancelled = true; if (timerRef.current) clearInterval(timerRef.current); timerRef.current = null; }; }, [extractionApi, runId, intervalMs]); return { run, error, isPolling }; }