
import { useState, useEffect, useCallback, useRef } from 'react';
import { isNextRedirectError } from '@/lib/utils/redirect-error';

/**
 * Stats 데이터 로딩 훅
 *
 * 통계 데이터의 초기 로딩, 수동 업데이트, 재로딩을 관리합니다.
 *
 * @param loadFn - Stats API 호출 함수
 * @param initialData - 초기값 (있으면 자동 로딩 스킵)
 *
 * @example
 * // 기본 사용
 * const { data: stats, reload: reloadStats } = useStatsLoader(getProcessStats);
 *
 * @example
 * // 초기값 제공 (있으면 자동 로딩 스킵)
 * const { data: stats, reload: reloadStats } = useStatsLoader(getContractStats, initialStats);
 */
export function useStatsLoader<T>(
  loadFn: () => Promise<{ success: boolean; data?: T }>,
  initialData?: T | null,
) {
  const [data, setData] = useState<T | null>(initialData ?? null);
  const loadFnRef = useRef(loadFn);
  loadFnRef.current = loadFn;

  const reload = useCallback(async () => {
    try {
      const result = await loadFnRef.current();
      if (result.success && result.data) {
        setData(result.data);
      }
    } catch (error) {
      if (isNextRedirectError(error)) throw error;
      console.error('[useStatsLoader] error:', error);
    }
  }, []);

  useEffect(() => {
    if (initialData != null) return;
    reload();
     
  }, []);

  return { data, setData, reload };
}
