
import { useEffect } from 'react';
import { BudgetData, BudgetPeriod, Transaction } from '../types';
import { clearAllBudgetData } from '../storage';
import { useBudgetState } from './useBudgetState';
import { useBudgetDataLoad } from './useBudgetDataLoad';
import { useBudgetDataEvents } from './useBudgetDataEvents';
import { useBudgetGoalUpdate } from './useBudgetGoalUpdate';
import { toast } from '@/hooks/useToast.wrapper';

// 예산 데이터 상태 관리 훅
export const useBudgetDataState = (transactions: Transaction[]) => {
  // 기본 상태 관리
  const {
    budgetData,
    setBudgetData,
    selectedTab,
    setSelectedTab,
    isInitialized,
    setIsInitialized,
    lastUpdateTime,
    setLastUpdateTime
  } = useBudgetState();

  // 데이터 로드 기능
  const { loadBudgetData } = useBudgetDataLoad(
    isInitialized,
    setIsInitialized,
    budgetData,
    setBudgetData,
    setLastUpdateTime
  );

  // 이벤트 처리
  useBudgetDataEvents(
    isInitialized,
    transactions,
    setBudgetData,
    setLastUpdateTime
  );

  // 예산 목표 업데이트 함수
  const handleBudgetGoalUpdate = useBudgetGoalUpdate(
    setBudgetData,
    setLastUpdateTime
  );

  // 예산 데이터 초기화 함수
  const resetBudgetData = () => {
    try {
      console.log('예산 데이터 초기화');
      clearAllBudgetData();
      
      // 로컬스토리지에서 다시 로드
      loadBudgetData();
      
      // 이벤트 발생시켜 다른 컴포넌트에 알림
      window.dispatchEvent(new Event('budgetDataUpdated'));
    } catch (error) {
      console.error('예산 데이터 초기화 중 오류:', error);
      toast({
        title: "예산 초기화 실패",
        description: "예산 데이터를 초기화하는데 문제가 발생했습니다.",
        variant: "destructive"
      });
    }
  };

  // 디버깅 로그 추가
  useEffect(() => {
    console.log('최신 예산 데이터:', JSON.stringify(budgetData), '마지막 업데이트:', new Date(lastUpdateTime).toISOString());
  }, [budgetData, lastUpdateTime]);

  return {
    budgetData,
    selectedTab,
    setSelectedTab,
    handleBudgetGoalUpdate,
    resetBudgetData
  };
};
