
import { Transaction } from '@/components/TransactionCard';
import { toast } from '@/hooks/useToast.wrapper';
import { EXPENSE_CATEGORIES } from '@/constants/categoryIcons';

// 로컬 스토리지에서 트랜잭션 데이터 로드
export const loadTransactionsFromStorage = (): Transaction[] => {
  try {
    // 로컬 스토리지에서 트랜잭션 데이터 가져오기
    const localDataStr = localStorage.getItem('transactions');
    console.log('로컬 트랜잭션 데이터:', localDataStr);
    
    if (localDataStr) {
      try {
        const localData = JSON.parse(localDataStr);
        
        // 지원되는 카테고리로 필터링
        const filteredData = localData.map((transaction: Transaction) => {
          // 트랜잭션의 카테고리가 현재 지원되는 카테고리가 아니면 '생활비'로 변경
          if (transaction.type === 'expense' && !EXPENSE_CATEGORIES.includes(transaction.category)) {
            return {
              ...transaction,
              category: '생활비' // 기본값으로 '생활비' 사용
            };
          }
          return transaction;
        });
        
        console.log('필터링된 트랜잭션:', filteredData.length);
        return filteredData;
      } catch (parseError) {
        console.error('트랜잭션 데이터 파싱 오류:', parseError);
        return [];
      }
    }
  } catch (err) {
    console.error('트랜잭션 로드 중 오류:', err);
  }
  
  console.log('로컬 트랜잭션 데이터 없음');
  return [];
};

// 로컬 스토리지에 트랜잭션 데이터 저장
export const saveTransactionsToStorage = (transactions: Transaction[]): void => {
  try {
    const dataString = JSON.stringify(transactions);
    localStorage.setItem('transactions', dataString);
    localStorage.setItem('transactions_backup', dataString); // 백업도 저장
    
    // 이벤트 발생
    window.dispatchEvent(new Event('transactionUpdated'));
    window.dispatchEvent(new StorageEvent('storage', {
      key: 'transactions',
      newValue: dataString
    }));
    
    console.log('트랜잭션 저장 완료:', transactions.length, '개');
  } catch (error) {
    console.error('트랜잭션 저장 오류:', error);
    toast({
      title: "데이터 저장 실패",
      description: "트랜잭션 데이터를 저장하는데 실패했습니다.",
      variant: "destructive"
    });
  }
};

// 예산 데이터 로드
export const loadBudgetFromStorage = (): number => {
  try {
    const budgetDataStr = localStorage.getItem('budgetData');
    if (budgetDataStr) {
      const budgetData = JSON.parse(budgetDataStr);
      return budgetData.monthly.targetAmount;
    }
  } catch (e) {
    console.error('예산 데이터 파싱 오류:', e);
  }
  return 0;
};
