import { clearAllTransactions } from './transactionStorage'; import { clearAllCategoryBudgets } from './categoryStorage'; import { clearAllBudgetData } from './budgetStorage'; import { DEFAULT_CATEGORY_BUDGETS } from '../budgetUtils'; import { getInitialBudgetData } from '../budgetUtils'; import { toast } from '@/hooks/useToast.wrapper'; /** * 모든 데이터 초기화 (첫 로그인 상태) */ export const resetAllData = (): void => { console.log('완전 초기화 시작 - resetAllData'); // 중요: 사용자 설정 관련 값 백업 const dontShowWelcomeValue = localStorage.getItem('dontShowWelcome'); const hasVisitedBefore = localStorage.getItem('hasVisitedBefore'); console.log('resetAllData - 사용자 설정 백업:', { dontShowWelcome: dontShowWelcomeValue, hasVisitedBefore }); // 모든 관련 데이터 키 목록 (분석 페이지의 데이터 포함) const dataKeys = [ 'transactions', 'categoryBudgets', 'budgetData', 'budget', 'monthlyExpenses', 'categorySpending', 'expenseAnalytics', 'expenseHistory', 'budgetHistory', 'analyticsCache', 'monthlyTotals', 'analytics', 'dailyBudget', 'weeklyBudget', 'monthlyBudget', 'chartData', ]; try { // 모든 관련 데이터 키 삭제 dataKeys.forEach(key => { console.log(`삭제 중: ${key}`); localStorage.removeItem(key); localStorage.removeItem(`${key}_backup`); // 백업 키도 함께 삭제 }); // 파일별 초기화 함수 호출 clearAllTransactions(); clearAllCategoryBudgets(); clearAllBudgetData(); // 기본 데이터로 초기화 (중복 삭제 방지를 위해 한 번만 실행) const initialBudgetData = getInitialBudgetData(); localStorage.setItem('budgetData', JSON.stringify(initialBudgetData)); localStorage.setItem('categoryBudgets', JSON.stringify(DEFAULT_CATEGORY_BUDGETS)); localStorage.setItem('transactions', JSON.stringify([])); // 중요: budgetData_backup도 설정하여 복구 가능하게 함 localStorage.setItem('budgetData_backup', JSON.stringify(initialBudgetData)); localStorage.setItem('categoryBudgets_backup', JSON.stringify(DEFAULT_CATEGORY_BUDGETS)); localStorage.setItem('transactions_backup', JSON.stringify([])); // 이벤트 발생시켜 데이터 로드 트리거 - 이벤트 순서 최적화 const events = [ new Event('transactionUpdated'), new Event('budgetDataUpdated'), new Event('categoryBudgetsUpdated'), new StorageEvent('storage') ]; // 모든 이벤트 동시에 발생 events.forEach(event => window.dispatchEvent(event)); // 중요: 사용자 설정 값 복원 (백업한 값이 있는 경우) if (dontShowWelcomeValue) { console.log('resetAllData - dontShowWelcome 값 복원:', dontShowWelcomeValue); localStorage.setItem('dontShowWelcome', dontShowWelcomeValue); } if (hasVisitedBefore) { console.log('resetAllData - hasVisitedBefore 값 복원:', hasVisitedBefore); localStorage.setItem('hasVisitedBefore', hasVisitedBefore); } // 첫 방문이 아닌 경우에만 토스트 알림 표시 if (hasVisitedBefore === 'true') { toast({ title: "데이터 초기화 완료", description: "모든 예산 및 지출 데이터가 초기화되었습니다.", }); } console.log('모든 데이터가 초기화되었습니다.'); } catch (error) { console.error('데이터 초기화 중 오류 발생:', error); // 오류 발생 시 토스트 알림 toast({ title: "초기화 실패", description: "데이터를 초기화하는데 문제가 발생했습니다.", variant: "destructive" }); } };