
import { BudgetData } from '../types';
import { getInitialBudgetData } from './constants';
import { toast } from '@/hooks/useToast.wrapper';

// 스토리지에서 안전하게 예산 데이터 가져오기
export const safelyLoadBudgetData = (defaultData: BudgetData = getInitialBudgetData()): BudgetData => {
  try {
    const budgetDataStr = localStorage.getItem('budgetData');
    if (budgetDataStr) {
      const parsed = JSON.parse(budgetDataStr);
      
      // 데이터 구조 검증 (daily, weekly, monthly 키 존재 확인)
      if (parsed && parsed.daily && parsed.weekly && parsed.monthly) {
        return parsed;
      } else {
        console.warn('저장된 예산 데이터 구조가 유효하지 않습니다. 기본값 사용.');
      }
    }
  } catch (error) {
    console.error('예산 데이터 로드 오류:', error);
  }
  
  // 오류 발생 또는 데이터 없음 시 기본값 반환
  return defaultData;
};

// 안전한 스토리지 접근
export const safeStorage = {
  get: (key: string, defaultValue: any = null): any => {
    try {
      const value = localStorage.getItem(key);
      if (value === null) return defaultValue;
      return JSON.parse(value);
    } catch (error) {
      console.error(`스토리지 읽기 오류 (${key}):`, error);
      return defaultValue;
    }
  },
  
  set: (key: string, value: any): boolean => {
    try {
      localStorage.setItem(key, JSON.stringify(value));
      return true;
    } catch (error) {
      console.error(`스토리지 쓰기 오류 (${key}):`, error);
      toast({
        title: "저장 오류",
        description: "데이터를 저장하는 중 문제가 발생했습니다.",
        variant: "destructive"
      });
      return false;
    }
  },
  
  remove: (key: string): boolean => {
    try {
      localStorage.removeItem(key);
      return true;
    } catch (error) {
      console.error(`스토리지 삭제 오류 (${key}):`, error);
      return false;
    }
  }
};
