
/**
 * 서버 및 로컬 데이터 상태 확인 기능
 */
import { supabase } from '@/lib/supabase';
import { DataStatus, ServerDataStatus, LocalDataStatus } from './types';

/**
 * 서버에 데이터가 있는지 확인
 */
export const checkServerDataStatus = async (userId: string): Promise<ServerDataStatus> => {
  try {
    // 서버에 예산 데이터 확인
    const { data: budgetData } = await supabase
      .from('budgets')
      .select('count')
      .eq('user_id', userId)
      .single();
      
    // 서버에 트랜잭션 데이터 확인  
    const { data: transactionsData } = await supabase
      .from('transactions')
      .select('count')
      .eq('user_id', userId)
      .single();
    
    const hasBudgetData = (budgetData?.count || 0) > 0;
    const hasTransactionData = (transactionsData?.count || 0) > 0;
    
    return {
      hasBudgetData,
      hasTransactionData,
      hasData: hasBudgetData || hasTransactionData
    };
  } catch (error) {
    console.error('서버 데이터 상태 확인 오류:', error);
    return {
      hasBudgetData: false,
      hasTransactionData: false,
      hasData: false
    };
  }
};

/**
 * 로컬 데이터가 있는지 확인
 */
export const checkLocalDataStatus = (): LocalDataStatus => {
  try {
    const budgetDataStr = localStorage.getItem('budgetData');
    const transactionsStr = localStorage.getItem('transactions');
    
    let hasBudgetData = false;
    if (budgetDataStr) {
      const budgetData = JSON.parse(budgetDataStr);
      hasBudgetData = budgetData?.monthly?.targetAmount > 0;
    }
    
    let hasTransactionData = false;
    if (transactionsStr) {
      const transactions = JSON.parse(transactionsStr);
      hasTransactionData = Array.isArray(transactions) && transactions.length > 0;
    }
    
    return {
      hasBudgetData,
      hasTransactionData,
      hasData: hasBudgetData || hasTransactionData
    };
  } catch (error) {
    console.error('로컬 데이터 상태 확인 오류:', error);
    return {
      hasBudgetData: false,
      hasTransactionData: false,
      hasData: false
    };
  }
};

/**
 * 서버와 로컬 데이터 상태 모두 확인
 */
export const checkDataStatus = async (userId: string): Promise<DataStatus> => {
  const serverStatus = await checkServerDataStatus(userId);
  const localStatus = checkLocalDataStatus();
  
  return {
    server: serverStatus,
    local: localStatus
  };
};
