
import { useCallback } from 'react';
import { getLastSyncTime } from '@/utils/syncUtils';

/**
 * 동기화 시간 관련 이벤트를 처리하는 커스텀 훅
 */
export const useSyncTimeEvents = (
  lastSync: string | null, 
  setLastSync: React.Dispatch<React.SetStateAction<string | null>>
) => {
  /**
   * 동기화 시간 이벤트 리스너 설정
   */
  const setupSyncTimeEventListeners = useCallback(() => {
    const updateLastSyncTime = (event?: Event | CustomEvent) => {
      const newTime = getLastSyncTime();
      const eventDetails = event instanceof CustomEvent ? ` (이벤트 상세: ${JSON.stringify(event.detail)})` : '';
      console.log(`마지막 동기화 시간 업데이트됨: ${newTime} ${eventDetails}`);
      setLastSync(newTime);
    };
    
    // 이벤트 리스너 등록 - 커스텀 이벤트 사용
    window.addEventListener('syncTimeUpdated', updateLastSyncTime);
    
    // 스토리지 이벤트도 모니터링
    const handleStorageChange = (event: StorageEvent) => {
      if (event.key === 'lastSync' || event.key === null) {
        console.log('스토리지 변경 감지 (lastSync):', event.newValue);
        updateLastSyncTime();
      }
    };
    
    window.addEventListener('storage', handleStorageChange);
    
    // 동기화 완료 이벤트도 모니터링
    window.addEventListener('syncComplete', updateLastSyncTime);
    
    // 초기 상태 업데이트 
    updateLastSyncTime();
    
    // 주기적 시간 확인 기능 설정
    const checkInterval = setupPeriodicTimeCheck(lastSync, setLastSync);
    
    // 정리 함수 반환
    return () => {
      window.removeEventListener('syncTimeUpdated', updateLastSyncTime);
      window.removeEventListener('storage', handleStorageChange);
      window.removeEventListener('syncComplete', updateLastSyncTime);
      clearInterval(checkInterval);
    };
  }, [lastSync, setLastSync]);
  
  return {
    setupSyncTimeEventListeners
  };
};

/**
 * 주기적으로 동기화 시간을 확인하는 기능 설정
 */
const setupPeriodicTimeCheck = (
  lastSync: string | null, 
  setLastSync: React.Dispatch<React.SetStateAction<string | null>>
): number => {
  // 1초마다 업데이트 상태 확인 (문제 해결을 위한 임시 방안)
  return window.setInterval(() => {
    const currentTime = getLastSyncTime();
    if (currentTime !== lastSync) {
      console.log('주기적 확인에서 동기화 시간 변경 감지:', currentTime);
      setLastSync(currentTime);
    }
  }, 1000);
};
