
/**
 * 예산 데이터 업로드 메인 모듈
 */
import { isSyncEnabled } from '../syncSettings';
import { 
  clearModifiedBudget, 
  clearModifiedCategoryBudgets 
} from './modifiedBudgetsTracker';
import { uploadMonthlyBudget } from './uploadMonthlyBudget';
import { uploadCategoryBudgets } from './uploadCategoryBudgets';
import { isValidMonthlyBudget, isValidCategoryBudgets } from './validators';
import { BudgetData, CategoryBudgets } from './types';

/**
 * 예산 데이터를 서버에 업로드
 */
export const uploadBudgets = async (userId: string): Promise<void> => {
  if (!isSyncEnabled()) return;

  try {
    const budgetDataStr = localStorage.getItem('budgetData');
    const categoryBudgetsStr = localStorage.getItem('categoryBudgets');
    
    console.log('예산 데이터 업로드 시작');
    
    // 예산 데이터 업로드
    if (budgetDataStr) {
      try {
        const budgetData: BudgetData = JSON.parse(budgetDataStr);
        
        // 월간 예산이 유효할 때만 업로드
        if (isValidMonthlyBudget(budgetData)) {
          console.log('유효한 월간 예산 발견:', budgetData.monthly.targetAmount);
          const uploadSuccess = await uploadMonthlyBudget(userId, budgetData);
          
          // 업로드 성공 후 수정 추적 정보 초기화
          if (uploadSuccess) {
            clearModifiedBudget();
          }
        } else {
          console.log('월간 예산이 0 이하거나 없어서 업로드 건너뜀');
        }
      } catch (error) {
        console.error('월간 예산 데이터 파싱 또는 업로드 오류:', error);
      }
    } else {
      console.log('업로드할 예산 데이터가 없음');
    }
    
    // 카테고리 예산 업로드
    if (categoryBudgetsStr) {
      try {
        const categoryBudgets: CategoryBudgets = JSON.parse(categoryBudgetsStr);
        
        // 총 카테고리 예산이 유효할 때만 업로드
        if (isValidCategoryBudgets(categoryBudgets)) {
          console.log('유효한 카테고리 예산 발견');
          const uploadSuccess = await uploadCategoryBudgets(userId, categoryBudgets);
          
          // 업로드 성공 후 수정 추적 정보 초기화
          if (uploadSuccess) {
            clearModifiedCategoryBudgets();
          }
        } else {
          console.log('카테고리 예산이 모두 0이어서 업로드 건너뜀');
        }
      } catch (error) {
        console.error('카테고리 예산 데이터 파싱 또는 업로드 오류:', error);
      }
    } else {
      console.log('업로드할 카테고리 예산이 없음');
    }
    
    console.log('예산 데이터 업로드 완료');
  } catch (error) {
    console.error('예산 데이터 업로드 실패:', error);
    throw error;
  }
};
