
import { useEffect } from 'react';
import { BudgetData } from '../types';
import { safelyLoadBudgetData } from '../budgetUtils';

/**
 * 예산 데이터 로드 및 초기화를 처리하는 훅
 */
export const useBudgetDataLoad = (
  isInitialized: boolean,
  setIsInitialized: (value: boolean) => void,
  budgetData: BudgetData,
  setBudgetData: (data: BudgetData) => void,
  setLastUpdateTime: (time: number) => void
) => {
  // 초기 로드 및 이벤트 리스너 설정
  useEffect(() => {
    // 예산 데이터 로드 함수 - 비동기 처리로 변경
    const loadBudget = async () => {
      try {
        console.log('예산 데이터 로드 시도 중...');
        
        // 비동기 작업을 마이크로태스크로 지연
        await new Promise<void>(resolve => queueMicrotask(() => resolve()));
        
        // 안전하게 데이터 로드
        const loadedData = safelyLoadBudgetData();
        console.log('로드된 예산 데이터:', JSON.stringify(loadedData));
        
        // 새로 로드한 데이터와 현재 데이터가 다를 때만 업데이트
        if (JSON.stringify(loadedData) !== JSON.stringify(budgetData)) {
          console.log('새 예산 데이터 감지됨, 상태 업데이트');
          setBudgetData(loadedData);
          setLastUpdateTime(Date.now());
        }
        
        // 초기화 상태 업데이트
        if (!isInitialized) {
          setIsInitialized(true);
        }
      } catch (error) {
        console.error('예산 데이터 로드 중 오류:', error);
      }
    };

    // 초기 로드 - 직접 호출
    loadBudget();

    // 반환 함수에서는 이벤트 리스너 정리할 필요 없음 (이벤트 리스너는 별도 훅에서 처리)
  }, [isInitialized]);

  // 로드 함수 반환 (외부에서 필요할 때 호출 가능)
  return {
    loadBudgetData: async () => {
      const loadedData = safelyLoadBudgetData();
      if (JSON.stringify(loadedData) !== JSON.stringify(budgetData)) {
        setBudgetData(loadedData);
        setLastUpdateTime(Date.now());
      }
      return loadedData;
    }
  };
};
