
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';
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<boolean | null>(null);
  const { toast } = useToast();
  const navigate = useNavigate();
  const { user } = useAuth();

  const resetAllData = async (): Promise<DataResetResult> => {
    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<string, string | null> = {};
      
      // 로그인 관련 항목 수집
      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
  };
};
