import { useContext, createContext } from 'react';
import { BudgetData, BudgetPeriod, Transaction } from './types';

// 컨텍스트 인터페이스 정의
export interface BudgetContextType {
  transactions: Transaction[];
  selectedTab: BudgetPeriod;
  setSelectedTab: (tab: BudgetPeriod) => void;
  budgetData: BudgetData;
  categoryBudgets: Record<string, number>;
  getCategorySpending: () => Array<{
    title: string;
    current: number;
    total: number;
  }>;
  addTransaction: (transaction: Transaction) => void;
  updateTransaction: (transaction: Transaction) => void;
  deleteTransaction: (id: string) => void;
  handleBudgetGoalUpdate: (type: BudgetPeriod, amount: number, newCategoryBudgets?: Record<string, number>) => void;
  resetBudgetData?: () => void; // 선택적 필드로 추가
}

// 컨텍스트 생성
export const BudgetContext = createContext<BudgetContextType | undefined>(undefined);

/**
 * 예산 컨텍스트에 접근하기 위한 커스텀 훅
 * BudgetProvider 내부에서만 사용해야 함
 */
export const useBudget = (): BudgetContextType => {
  const context = useContext(BudgetContext);
  if (context === undefined) {
    throw new Error('useBudget는 BudgetProvider 내부에서 사용해야 합니다');
  }
  return context;
};
