/**
 * 수정된 예산 데이터를 추적하는 유틸리티
 * 로컬 스토리지에 수정된 예산 정보를 저장하고 관리합니다.
 */

const MODIFIED_BUDGETS_KEY = 'modified_budgets';
const MODIFIED_CATEGORY_BUDGETS_KEY = 'modified_category_budgets';

interface ModifiedBudget {
  timestamp: number; // 수정 시간 (밀리초)
  monthlyAmount: number; // 월간 예산액
}

interface ModifiedCategoryBudgets {
  timestamp: number; // 수정 시간 (밀리초)
  categories: Record<string, number>; // 카테고리별 예산액
}

/**
 * 수정된 예산 정보를 로컬 스토리지에 저장
 */
export const markBudgetAsModified = (monthlyAmount: number): void => {
  try {
    const modifiedBudget: ModifiedBudget = {
      timestamp: Date.now(),
      monthlyAmount
    };
    
    localStorage.setItem(MODIFIED_BUDGETS_KEY, JSON.stringify(modifiedBudget));
    console.log(`[예산 추적] 수정된 예산 정보 저장 완료: ${monthlyAmount}원`);
  } catch (error) {
    console.error('[예산 추적] 수정된 예산 정보 저장 실패:', error);
  }
};

/**
 * 수정된 카테고리 예산 정보를 로컬 스토리지에 저장
 */
export const markCategoryBudgetsAsModified = (categories: Record<string, number>): void => {
  try {
    const modifiedCategoryBudgets: ModifiedCategoryBudgets = {
      timestamp: Date.now(),
      categories
    };
    
    localStorage.setItem(MODIFIED_CATEGORY_BUDGETS_KEY, JSON.stringify(modifiedCategoryBudgets));
    console.log(`[예산 추적] 수정된 카테고리 예산 정보 저장 완료: ${Object.keys(categories).length}개 카테고리`);
  } catch (error) {
    console.error('[예산 추적] 수정된 카테고리 예산 정보 저장 실패:', error);
  }
};

/**
 * 단일 카테고리 예산 정보를 수정된 것으로 표시
 */
export const markSingleCategoryBudgetAsModified = (category: string, amount: number): void => {
  try {
    // 기존 수정 정보 가져오기
    const existing = getModifiedCategoryBudgets();
    const categories = existing?.categories || {};
    
    // 새 카테고리 예산 정보 추가
    categories[category] = amount;
    
    // 수정된 정보 저장
    const modifiedCategoryBudgets: ModifiedCategoryBudgets = {
      timestamp: Date.now(),
      categories
    };
    
    localStorage.setItem(MODIFIED_CATEGORY_BUDGETS_KEY, JSON.stringify(modifiedCategoryBudgets));
    console.log(`[예산 추적] 카테고리 '${category}' 예산 정보 저장 완료: ${amount}원`);
  } catch (error) {
    console.error(`[예산 추적] 카테고리 '${category}' 예산 정보 저장 실패:`, error);
  }
};

/**
 * 수정된 예산 정보 가져오기
 */
export const getModifiedBudget = (): ModifiedBudget | null => {
  try {
    const data = localStorage.getItem(MODIFIED_BUDGETS_KEY);
    if (!data) return null;
    
    return JSON.parse(data) as ModifiedBudget;
  } catch (error) {
    console.error('[예산 추적] 수정된 예산 정보 조회 실패:', error);
    return null;
  }
};

/**
 * 수정된 카테고리 예산 정보 가져오기
 */
export const getModifiedCategoryBudgets = (): ModifiedCategoryBudgets | null => {
  try {
    const data = localStorage.getItem(MODIFIED_CATEGORY_BUDGETS_KEY);
    if (!data) return null;
    
    return JSON.parse(data) as ModifiedCategoryBudgets;
  } catch (error) {
    console.error('[예산 추적] 수정된 카테고리 예산 정보 조회 실패:', error);
    return null;
  }
};

/**
 * 예산 수정 정보 초기화
 */
export const clearModifiedBudget = (): void => {
  try {
    localStorage.removeItem(MODIFIED_BUDGETS_KEY);
    console.log('[예산 추적] 수정된 예산 정보 초기화 완료');
  } catch (error) {
    console.error('[예산 추적] 수정된 예산 정보 초기화 실패:', error);
  }
};

/**
 * 카테고리 예산 수정 정보 초기화
 */
export const clearModifiedCategoryBudgets = (): void => {
  try {
    localStorage.removeItem(MODIFIED_CATEGORY_BUDGETS_KEY);
    console.log('[예산 추적] 수정된 카테고리 예산 정보 초기화 완료');
  } catch (error) {
    console.error('[예산 추적] 수정된 카테고리 예산 정보 초기화 실패:', error);
  }
};

/**
 * 모든 수정 정보 초기화
 */
export const clearAllModifiedBudgets = (): void => {
  clearModifiedBudget();
  clearModifiedCategoryBudgets();
};
