
/**
 * 네트워크 연결 확인 유틸리티
 */
import { setNetworkStatus } from './status';

/**
 * 현재 네트워크 상태 확인 (개선 버전)
 */
export const checkNetworkStatus = async (): Promise<boolean> => {
  try {
    // 먼저 navigator.onLine으로 기본 확인
    if (navigator.onLine) {
      console.log('[네트워크] 기본 온라인 상태 확인: 온라인');
      setNetworkStatus('online');
      return true;
    }
    
    console.log('[네트워크] 기본 온라인 상태 확인: 오프라인, 추가 확인 시도...');
    
    // 더 빠른 타임아웃 설정 (2초)
    const controller = new AbortController();
    const timeoutId = setTimeout(() => controller.abort(), 2000);
    
    // 신뢰성 있는 확인을 위해 로컬 리소스 요청
    // CORS 이슈와 실패 방지를 위해 자체 페이지 내 리소스 확인
    try {
      // 타임스탬프로 캐시 방지
      const timestamp = new Date().getTime();
      // 자체 파비콘이나 작은 리소스 확인
      const url = `/favicon.ico?t=${timestamp}`;
      
      const response = await fetch(url, { 
        method: 'HEAD', 
        signal: controller.signal,
        cache: 'no-store' // 캐시 무시
      });
      
      clearTimeout(timeoutId);
      
      if (response.ok) {
        console.log('[네트워크] 로컬 리소스 확인 성공');
        setNetworkStatus('online');
        return true;
      } else {
        console.log(`[네트워크] 로컬 리소스 확인 실패: ${response.status}`);
        // 여전히 온라인일 수 있으므로 navigator.onLine 신뢰
        const isOnline = navigator.onLine;
        setNetworkStatus(isOnline ? 'online' : 'offline');
        return isOnline;
      }
    } catch (error) {
      clearTimeout(timeoutId);
      console.warn('[네트워크] 로컬 리소스 확인 중 오류:', error);
      
      // 여전히 온라인일 수 있으므로 navigator.onLine 신뢰
      const isOnline = navigator.onLine;
      console.log(`[네트워크] navigator.onLine 결과 사용: ${isOnline ? '온라인' : '오프라인'}`);
      setNetworkStatus(isOnline ? 'online' : 'offline');
      return isOnline;
    }
  } catch (error) {
    console.error('[네트워크] 연결 확인 중 예상치 못한 오류:', error);
    // 최후의 수단으로 navigator.onLine 사용
    const isOnline = navigator.onLine;
    setNetworkStatus(isOnline ? 'online' : 'offline');
    return isOnline;
  }
};
