
import React, { useEffect } from 'react';
import { SyncResult } from '@/utils/sync/data';
import { toast } from '@/hooks/useToast.wrapper';
import useNotifications from '@/hooks/useNotifications';

// 알림 인스턴스 얻기 위한 전역 변수
let notificationAdder: ((title: string, message: string) => void) | null = null;

// 알림 함수 설정
export const setSyncNotificationAdder = (adder: (title: string, message: string) => void) => {
  notificationAdder = adder;
};

// 동기화 실패 카운터 추가
let syncFailureCount = 0;
const MAX_SYNC_FAILURE_NOTIFICATIONS = 2; // 최대 알림 횟수

// 동기화 결과 처리 함수
export const handleSyncResult = (result: SyncResult) => {
  if (result.success) {
    // 성공 시 실패 카운터 초기화
    syncFailureCount = 0;
    
    let title = '';
    let description = '';
    
    if (result.uploadSuccess && result.downloadSuccess) {
      // 양방향 동기화 성공
      title = "동기화 완료";
      description = "모든 데이터가 성공적으로 동기화되었습니다.";
    } else if (result.uploadSuccess) {
      // 업로드만 성공
      title = "동기화 완료";
      description = "로컬 데이터가 클라우드에 업로드되었습니다.";
    } else if (result.downloadSuccess) {
      // 다운로드만 성공
      title = "동기화 완료";
      description = "클라우드 데이터가 기기에 다운로드되었습니다.";
    }
    
    // 토스트 표시
    toast({
      title,
      description,
    });
    
    // 알림 추가 (설정된 경우)
    if (notificationAdder) {
      notificationAdder(title, description);
    }
    
    // 상세 결과 로깅
    console.log("동기화 세부 결과:", {
      예산업로드: result.details?.budgetUpload ? '성공' : '실패',
      예산다운로드: result.details?.budgetDownload ? '성공' : '실패',
      트랜잭션업로드: result.details?.transactionUpload ? '성공' : '실패',
      트랜잭션다운로드: result.details?.transactionDownload ? '성공' : '실패'
    });
    
    return true;
  } else {
    // 동기화 실패
    console.error("동기화 실패 세부 결과:", result.details);
    
    // 실패 카운터 증가 및 최대 알림 횟수 제한
    syncFailureCount++;
    
    if (syncFailureCount <= MAX_SYNC_FAILURE_NOTIFICATIONS) {
      const title = "동기화 실패";
      const description = "데이터 동기화 중 문제가 발생했습니다. 나중에 다시 시도합니다.";
      
      // 토스트 표시
      toast({
        title,
        description,
        variant: "destructive"
      });
      
      // 알림 추가 (설정된 경우)
      if (notificationAdder) {
        notificationAdder(title, description);
      }
    } else {
      console.log(`동기화 실패 알림 제한 (${syncFailureCount}회 실패)`);
    }
    
    return false;
  }
};

// 커스텀 훅: 동기화 알림 관리
export const useSyncNotifications = () => {
  const { addNotification } = useNotifications();
  
  // 컴포넌트 마운트 시 알림 함수 설정
  useEffect(() => {
    setSyncNotificationAdder(addNotification);
    return () => setSyncNotificationAdder(null);
  }, [addNotification]);
};

// 동기화 실패 카운터 초기화 함수 (로그인/로그아웃 시 사용)
export const resetSyncFailureCount = () => {
  syncFailureCount = 0;
};
