
/**
 * 스토리지 관련 유틸리티 함수
 */

// 보존할 항목 목록
const PRESERVE_KEYS = [
  'dontShowWelcome',
  'hasVisitedBefore',
  // Supabase 인증 관련 키는 보존
  'supabase.auth.token',
  'sb-',
  'supabase-auth',
];

/**
 * 모든 로컬 스토리지 데이터 초기화 (보존할 항목 제외)
 */
export const resetAllStorageData = (): void => {
  try {
    console.log('[스토리지 초기화] 시작');
    
    // 보존할 항목 백업
    const preservedItems: Record<string, string | null> = {};
    
    // 로컬스토리지 키 목록 가져오기
    const keys: string[] = [];
    for (let i = 0; i < localStorage.length; i++) {
      const key = localStorage.key(i);
      if (key) keys.push(key);
    }
    
    // 보존할 항목 백업
    keys.forEach(key => {
      const shouldPreserve = PRESERVE_KEYS.some(pattern => 
        key === pattern || (pattern.endsWith('-') && key.startsWith(pattern))
      );
      
      if (shouldPreserve) {
        preservedItems[key] = localStorage.getItem(key);
        console.log(`[스토리지 초기화] 보존 항목: ${key}`);
      }
    });
    
    // 모든 데이터 삭제
    localStorage.clear();
    console.log('[스토리지 초기화] 모든 데이터 삭제됨');
    
    // 보존할 항목 복원
    Object.entries(preservedItems).forEach(([key, value]) => {
      if (value !== null) {
        localStorage.setItem(key, value);
        console.log(`[스토리지 초기화] 항목 복원: ${key}`);
      }
    });
    
    // 완전 삭제 확인을 위한 백업 데이터도 삭제
    if (localStorage.getItem('transactions_backup')) {
      localStorage.removeItem('transactions_backup');
      console.log('[스토리지 초기화] 트랜잭션 백업 데이터 삭제됨');
    }
    
    if (localStorage.getItem('budgetData_backup')) {
      localStorage.removeItem('budgetData_backup');
      console.log('[스토리지 초기화] 예산 백업 데이터 삭제됨');
    }
    
    if (localStorage.getItem('categoryBudgets_backup')) {
      localStorage.removeItem('categoryBudgets_backup');
      console.log('[스토리지 초기화] 카테고리 예산 백업 삭제됨');
    }
    
    console.log('[스토리지 초기화] 완료');
  } catch (error) {
    console.error('[스토리지 초기화] 오류:', error);
    throw error;
  }
};

/**
 * 특정 키에 해당하는 데이터 삭제
 */
export const clearStorageItem = (key: string): void => {
  try {
    localStorage.removeItem(key);
    console.log(`[스토리지] ${key} 데이터 삭제됨`);
    
    // 관련 백업 데이터도 삭제
    const backupKey = `${key}_backup`;
    if (localStorage.getItem(backupKey)) {
      localStorage.removeItem(backupKey);
      console.log(`[스토리지] ${backupKey} 데이터 삭제됨`);
    }
  } catch (error) {
    console.error(`[스토리지] ${key} 삭제 중 오류:`, error);
  }
};
