
import { CategoryBudget, Transaction } from '../types';
import { EXPENSE_CATEGORIES } from '@/constants/categoryIcons';

// 카테고리별 지출 계산
export const calculateCategorySpending = (
  transactions: Transaction[],
  categoryBudgets: Record<string, number>
): CategoryBudget[] => {
  const expenseTransactions = transactions.filter(t => t.type === 'expense');
  const categorySpending: Record<string, number> = {};
  
  // 모든 카테고리에 대해 초기값 0 설정
  Object.keys(categoryBudgets).forEach(category => {
    // 정의된 카테고리만 유지
    if (EXPENSE_CATEGORIES.includes(category)) {
      categorySpending[category] = 0;
    }
  });
  
  // 지원되는 카테고리가 없을 경우 기본값 설정
  if (Object.keys(categorySpending).length === 0) {
    EXPENSE_CATEGORIES.forEach(category => {
      categorySpending[category] = 0;
    });
  }
  
  expenseTransactions.forEach(t => {
    if (t.category in categorySpending) {
      categorySpending[t.category] += t.amount;
    } else if (EXPENSE_CATEGORIES.includes(t.category)) {
      // 지원되는 카테고리이지만 초기화되지 않은 경우
      categorySpending[t.category] = t.amount;
    } else if (t.category === '교통비') {
      // 예전 카테고리명 '교통비'를 '교통'으로 매핑
      categorySpending['교통'] = (categorySpending['교통'] || 0) + t.amount;
    } else {
      // 지원되지 않는 카테고리는 '기타'로 집계
      categorySpending['기타'] = (categorySpending['기타'] || 0) + t.amount;
    }
  });
  
  return EXPENSE_CATEGORIES.map(category => ({
    title: category,
    current: categorySpending[category] || 0,
    total: categoryBudgets[category] || 0
  }));
};
