import { useEffect, useRef, useCallback } from 'react';

/**
 * 공통 폴링 훅 — 주기적으로 fetchFn을 호출하고 결과를 onData로 전달.
 * enabled가 false면 폴링 중지.
 */
export function usePoll<T>(
  fetchFn: () => Promise<T>,
  onData: (data: T) => void,
  intervalMs: number,
  enabled = true,
): void {
  const onDataRef = useRef(onData);
  onDataRef.current = onData;

  const fetchRef = useRef(fetchFn);
  fetchRef.current = fetchFn;

  const doFetch = useCallback(async () => {
    try {
      const data = await fetchRef.current();
      onDataRef.current(data);
    } catch {
      // graceful — 기존 데이터 유지
    }
  }, []);

  useEffect(() => {
    if (!enabled) return;
    doFetch();
    const t = setInterval(doFetch, intervalMs);
    return () => clearInterval(t);
  }, [enabled, intervalMs, doFetch]);
}
