
/**
 * 주요 동기화 작업 처리 모듈
 */
import { uploadBudgets, downloadBudgets } from '../budget';
import { uploadTransactions, downloadTransactions } from '../transaction';
import { setLastSyncTime } from '../time';
import { SyncResult } from './types';

/**
 * 데이터 업로드 수행
 */
export const performUpload = async (userId: string): Promise<{
  budgetUpload: boolean;
  transactionUpload: boolean;
}> => {
  try {
    console.log('데이터 업로드 시작');
    
    // 예산 데이터 업로드
    let budgetUpload = false;
    try {
      await uploadBudgets(userId);
      budgetUpload = true;
      console.log('예산 업로드 성공');
    } catch (error) {
      console.error('예산 업로드 실패:', error);
    }
    
    // 트랜잭션 데이터 업로드
    let transactionUpload = false;
    try {
      await uploadTransactions(userId);
      transactionUpload = true;
      console.log('트랜잭션 업로드 성공');
    } catch (error) {
      console.error('트랜잭션 업로드 실패:', error);
    }
    
    return { budgetUpload, transactionUpload };
  } catch (error) {
    console.error('업로드 작업 실패:', error);
    return { budgetUpload: false, transactionUpload: false };
  }
};

/**
 * 데이터 다운로드 수행
 */
export const performDownload = async (userId: string): Promise<{
  budgetDownload: boolean;
  transactionDownload: boolean;
}> => {
  try {
    console.log('데이터 다운로드 시작');
    
    // 예산 데이터 다운로드
    let budgetDownload = false;
    try {
      await downloadBudgets(userId);
      budgetDownload = true;
      console.log('예산 다운로드 성공');
    } catch (error) {
      console.error('예산 다운로드 실패:', error);
    }
    
    // 트랜잭션 데이터 다운로드
    let transactionDownload = false;
    try {
      await downloadTransactions(userId);
      transactionDownload = true;
      console.log('트랜잭션 다운로드 성공');
    } catch (error) {
      console.error('트랜잭션 다운로드 실패:', error);
    }
    
    return { budgetDownload, transactionDownload };
  } catch (error) {
    console.error('다운로드 작업 실패:', error);
    return { budgetDownload: false, transactionDownload: false };
  }
};

/**
 * 동기화 결과 객체 생성
 */
export const createSyncResult = (
  uploadResult: { budgetUpload: boolean; transactionUpload: boolean },
  downloadResult: { budgetDownload: boolean; transactionDownload: boolean }
): SyncResult => {
  const uploadSuccess = uploadResult.budgetUpload || uploadResult.transactionUpload;
  const downloadSuccess = downloadResult.budgetDownload || downloadResult.transactionDownload;
  
  return {
    success: uploadSuccess || downloadSuccess,
    partial: (uploadSuccess || downloadSuccess) && !(uploadSuccess && downloadSuccess),
    uploadSuccess,
    downloadSuccess,
    details: {
      budgetUpload: uploadResult.budgetUpload,
      budgetDownload: downloadResult.budgetDownload,
      transactionUpload: uploadResult.transactionUpload,
      transactionDownload: downloadResult.transactionDownload
    }
  };
};
