
/**
 * 월간 예산 업로드 기능
 */
import { supabase } from '@/lib/supabase';
import { BudgetData, BudgetRecord } from './types';
import { isValidMonthlyBudget } from './validators';

/**
 * 월간 예산 데이터 업로드
 */
export async function uploadMonthlyBudget(userId: string, parsedBudgetData: BudgetData): Promise<boolean> {
  console.log('월간 예산 데이터 업로드:', parsedBudgetData);
  
  // 월간 타겟 금액 가져오기
  const monthlyTarget = parsedBudgetData.monthly.targetAmount;
  
  // 예산이 0 이하면 업로드하지 않음
  if (typeof monthlyTarget !== 'number' || monthlyTarget <= 0) {
    console.log('월간 예산이 0 이하여서 업로드 건너뜀:', monthlyTarget);
    return false;
  }
  
  // 현재 월/년도 가져오기
  const now = new Date();
  const currentMonth = now.getMonth() + 1; // 0-11 -> 1-12
  const currentYear = now.getFullYear();
  
  // 기존 예산 데이터 확인
  const { data: existingBudgets, error: fetchError } = await supabase
    .from('budgets')
    .select('*')
    .eq('user_id', userId)
    .eq('month', currentMonth)
    .eq('year', currentYear);
    
  if (fetchError) {
    console.error('기존 예산 데이터 조회 실패:', fetchError);
    throw fetchError;
  }
  
  console.log('업로드할 월간 예산:', monthlyTarget);
  
  // 현재 타임스탬프
  const currentTimestamp = new Date().toISOString();
  
  // 가능한 경우 서버 데이터와 비교하여 필요한 경우만 업데이트
  if (existingBudgets && existingBudgets.length > 0) {
    const existingBudget = existingBudgets[0];
    
    // 새 예산이 기존 예산보다 클 때만 업데이트
    if (typeof existingBudget.total_budget === 'number' && monthlyTarget > existingBudget.total_budget) {
      console.log(`새 예산(${monthlyTarget})이 기존 예산(${existingBudget.total_budget})보다 큼, 업데이트 실행`);
      
      // 기존 데이터 업데이트
      const { error } = await supabase
        .from('budgets')
        .update({
          total_budget: monthlyTarget,
          updated_at: currentTimestamp
        })
        .eq('id', existingBudget.id);
        
      if (error) {
        console.error('예산 데이터 업데이트 실패:', error);
        throw error;
      }
      
      console.log('예산 데이터 업데이트 성공');
      return true;
    } else {
      console.log(`새 예산(${monthlyTarget})이 기존 예산(${existingBudget.total_budget})보다 작거나 같음, 업데이트 건너뜀`);
      return false;
    }
  } else {
    // 새 데이터 삽입
    const newBudget: BudgetRecord = {
      user_id: userId,
      month: currentMonth,
      year: currentYear,
      total_budget: monthlyTarget,
      created_at: currentTimestamp,
      updated_at: currentTimestamp
    };
    
    const { error } = await supabase
      .from('budgets')
      .insert(newBudget);
      
    if (error) {
      console.error('예산 데이터 삽입 실패:', error);
      throw error;
    }
    
    console.log('예산 데이터 삽입 성공');
    return true;
  }
}
