import { useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { useToast } from '@/hooks/useToast.wrapper'; import { resetAllStorageData } from '@/utils/storageUtils'; import { clearCloudData } from '@/utils/sync/clearCloudData'; import { useAuth } from '@/contexts/auth/AuthProvider'; import { isSyncEnabled, setSyncEnabled } from '@/utils/sync/syncSettings'; export interface DataResetResult { isCloudResetSuccess: boolean | null; } export const useDataReset = () => { const [isResetting, setIsResetting] = useState(false); const [isCloudResetSuccess, setIsCloudResetSuccess] = useState(null); const { toast } = useToast(); const navigate = useNavigate(); const { user } = useAuth(); const resetAllData = async (): Promise => { try { setIsResetting(true); console.log('모든 데이터 초기화 시작'); // 현재 동기화 설정 저장 const syncWasEnabled = isSyncEnabled(); console.log('데이터 초기화 전 동기화 상태:', syncWasEnabled ? '활성화' : '비활성화'); // 클라우드 데이터 초기화 먼저 시도 (로그인 상태인 경우) let cloudResetSuccess = false; if (user) { console.log('로그인 상태: 클라우드 데이터 초기화 시도'); cloudResetSuccess = await clearCloudData(user.id); setIsCloudResetSuccess(cloudResetSuccess); if (cloudResetSuccess) { console.log('클라우드 데이터 초기화 성공'); } else { console.warn('클라우드 데이터 초기화 실패 또는 부분 성공'); } } else { console.log('로그인하지 않음: 클라우드 초기화 건너뜀'); setIsCloudResetSuccess(null); } // 초기화 실행 전에 사용자 설정 백업 const dontShowWelcomeValue = localStorage.getItem('dontShowWelcome'); const hasVisitedBefore = localStorage.getItem('hasVisitedBefore'); // 로그인 관련 설정 백업 (supabase 관련 모든 설정) const authBackupItems: Record = {}; // 로그인 관련 항목 수집 for (let i = 0; i < localStorage.length; i++) { const key = localStorage.key(i); if (key && ( key.includes('supabase') || key.includes('auth') || key.includes('sb-') || key.includes('token') || key.includes('user') || key.includes('session') )) { authBackupItems[key] = localStorage.getItem(key); console.log(`백업 항목: ${key}`); } } // 데이터 초기화 resetAllStorageData(); // 사용자 설정 복원 if (dontShowWelcomeValue) { localStorage.setItem('dontShowWelcome', dontShowWelcomeValue); } if (hasVisitedBefore) { localStorage.setItem('hasVisitedBefore', hasVisitedBefore); } // 로그인 관련 설정 복원 (로그인 화면이 나타나지 않도록) Object.entries(authBackupItems).forEach(([key, value]) => { if (value) { localStorage.setItem(key, value); console.log(`복원 항목: ${key}`); } }); // 중요: 동기화 설정은 초기화 후 항상 비활성화 setSyncEnabled(false); console.log('동기화 설정이 비활성화되었습니다.'); // 마지막 동기화 시간은 초기화 localStorage.removeItem('lastSync'); // 스토리지 이벤트 트리거하여 다른 컴포넌트에 변경 알림 window.dispatchEvent(new Event('transactionUpdated')); window.dispatchEvent(new Event('budgetDataUpdated')); window.dispatchEvent(new Event('categoryBudgetsUpdated')); window.dispatchEvent(new StorageEvent('storage')); window.dispatchEvent(new Event('auth-state-changed')); // 동기화 상태 변경 이벤트 추가 // 클라우드 초기화 상태에 따라 다른 메시지 표시 if (user) { if (cloudResetSuccess) { toast({ title: "모든 데이터가 초기화되었습니다.", description: "로컬 및 클라우드의 모든 데이터가 초기화되었으며, 동기화 설정이 비활성화되었습니다.", }); } else { toast({ title: "로컬 데이터만 초기화됨", description: "로컬 데이터는 초기화되었지만, 클라우드 데이터 초기화 중 문제가 발생했습니다. 동기화 설정이 비활성화되었습니다.", variant: "destructive" }); } } else { toast({ title: "모든 데이터가 초기화되었습니다.", description: "모든 예산, 지출 내역, 설정이 초기화되었습니다.", }); } console.log('모든 데이터 초기화 완료'); // 페이지 리프레시 대신 navigate 사용 (딜레이 제거) navigate('/settings', { replace: true }); return { isCloudResetSuccess: cloudResetSuccess }; } catch (error) { console.error('데이터 초기화 실패:', error); toast({ title: "데이터 초기화 실패", description: "데이터를 초기화하는 중 문제가 발생했습니다.", variant: "destructive", }); return { isCloudResetSuccess: false }; } finally { setIsResetting(false); } }; return { isResetting, isCloudResetSuccess, resetAllData }; };