/**
 * 네트워크 상태 관리 유틸리티
 */
import { NetworkStatus } from './types';

// 메모리에 네트워크 상태 저장
let networkStatus: NetworkStatus | null = null;

/**
 * 네트워크 상태 저장 (메모리 기반)
 */
export const setNetworkStatus = (status: NetworkStatus): void => {
  // 메모리에 상태 저장
  networkStatus = status;
  
  // 상태 변경 이벤트 발생
  window.dispatchEvent(new CustomEvent('networkStatusChange', { detail: status }));
  console.log(`[네트워크] 상태 변경: ${status}`);
};

/**
 * 네트워크 상태 가져오기 (메모리 기반)
 */
export const getNetworkStatus = (): NetworkStatus => {
  return networkStatus || 'online';
};

/**
 * 네트워크 상태 변경 이벤트 리스너 등록
 */
export const onNetworkStatusChange = (callback: (status: NetworkStatus) => void): () => void => {
  const handler = (event: Event) => {
    const customEvent = event as CustomEvent<NetworkStatus>;
    callback(customEvent.detail);
  };
  
  window.addEventListener('networkStatusChange', handler);
  
  // 구독 취소 함수 반환
  return () => {
    window.removeEventListener('networkStatusChange', handler);
  };
};
