
import { getSupabaseUrl } from '@/lib/supabase/config';

/**
 * 기본 서버 연결 상태 검사 유틸리티
 */
export const verifyServerConnection = async (): Promise<{
  connected: boolean;
  message: string;
  statusCode?: number;
}> => {
  try {
    const start = Date.now();
    
    // Supabase URL 가져오기
    const supabaseUrl = getSupabaseUrl();
    
    if (!supabaseUrl) {
      return {
        connected: false,
        message: 'Supabase URL이 설정되지 않았습니다.'
      };
    }
    
    // 캐시 방지용 쿼리 파라미터 추가
    const cacheParam = `?_nocache=${Date.now()}`;
    
    // 서버 연결 상태 확인
    const response = await fetch(`${supabaseUrl}/auth/v1/${cacheParam}`, {
      method: 'GET',
      headers: {
        'Content-Type': 'application/json'
      },
      signal: AbortSignal.timeout(8000)
    });
    
    const elapsed = Date.now() - start;
    
    // 200, 401, 404 응답도 서버가 살아있다는 신호로 간주
    if (response.ok || response.status === 401 || response.status === 404) {
      return {
        connected: true,
        message: `서버 연결 성공 (응답 시간: ${elapsed}ms)`,
        statusCode: response.status
      };
    } else {
      return {
        connected: false,
        message: `서버 응답 오류: ${response.status} ${response.statusText}`,
        statusCode: response.status
      };
    }
  } catch (error: any) {
    console.error('서버 연결 확인 중 오류:', error);
    
    let errorMessage = '알 수 없는 네트워크 오류';
    
    if (error.message) {
      if (error.message.includes('Failed to fetch')) {
        errorMessage = '서버 연결 실패';
      } else if (error.message.includes('NetworkError')) {
        errorMessage = '네트워크 연결 실패';
      } else if (error.message.includes('timeout') || error.message.includes('timed out')) {
        errorMessage = '서버 응답 시간 초과';
      } else {
        errorMessage = error.message;
      }
    }
    
    return {
      connected: false,
      message: errorMessage
    };
  }
};
