
import { useState } from 'react';
import { toast } from '@/hooks/useToast.wrapper';
import { trySyncAllData, setLastSyncTime } from '@/utils/syncUtils';
import { handleSyncResult } from './syncResultHandler';
import useNotifications from '@/hooks/useNotifications';

/**
 * 수동 동기화 기능을 위한 커스텀 훅
 */
export const useManualSync = (user: any) => {
  const [syncing, setSyncing] = useState(false);
  const { addNotification } = useNotifications();

  // 수동 동기화 핸들러
  const handleManualSync = async () => {
    if (!user) {
      toast({
        title: "로그인 필요",
        description: "데이터 동기화를 위해 로그인이 필요합니다.",
        variant: "destructive"
      });
      
      addNotification(
        "로그인 필요", 
        "데이터 동기화를 위해 로그인이 필요합니다."
      );
      return;
    }
    
    // 이미 동기화 중이면 중복 실행 방지
    if (syncing) {
      console.log('이미 동기화가 진행 중입니다.');
      return;
    }
    
    await performSync(user.id);
  };

  // 실제 동기화 수행 함수
  const performSync = async (userId: string) => {
    if (!userId) return;
    
    try {
      setSyncing(true);
      console.log('수동 동기화 시작');
      
      addNotification(
        "동기화 시작", 
        "데이터 동기화가 시작되었습니다."
      );
      
      // 동기화 실행
      const result = await trySyncAllData(userId);
      
      // 동기화 결과 처리
      handleSyncResult(result);
      
      // 동기화 시간 업데이트
      if (result.success) {
        const currentTime = new Date().toISOString();
        console.log('수동 동기화 성공, 시간 업데이트:', currentTime);
        setLastSyncTime(currentTime);
      }
      
      return result;
    } catch (error) {
      console.error('동기화 오류:', error);
      toast({
        title: "동기화 오류",
        description: "동기화 중 문제가 발생했습니다. 다시 시도해주세요.",
        variant: "destructive"
      });
      
      addNotification(
        "동기화 오류", 
        "동기화 중 문제가 발생했습니다. 다시 시도해주세요."
      );
    } finally {
      setSyncing(false);
      console.log('수동 동기화 종료');
    }
  };

  return { syncing, handleManualSync };
};
