
import { SupabaseClient } from '@supabase/supabase-js';
import { TestResult } from './types';
import { getSupabaseUrl, getSupabaseKey } from '../config';

// REST API 테스트
export const testRestApi = async (
  supabase: SupabaseClient
): Promise<TestResult> => {
  console.log('REST API 테스트 시작...');
  
  try {
    const originalUrl = getSupabaseUrl();
    const supabaseKey = getSupabaseKey();
    
    if (!originalUrl || !supabaseKey) {
      return {
        success: false,
        error: '유효하지 않은 Supabase URL 또는 API 키'
      };
    }

    // HTTP URL 감지
    const isHttpUrl = originalUrl.startsWith('http:') && !originalUrl.startsWith('http://localhost');
    
    // 클라이언트 인스턴스로 간단한 API 호출 수행
    const { data, error } = await supabase
      .from('_tests')
      .select('*')
      .limit(1);
    
    if (error) {
      // CORS 관련 오류인지 확인
      if (error.message && error.message.includes('fetch failed') && isHttpUrl) {
        return {
          success: false,
          error: `REST API 요청 실패: ${error.message} (CORS 오류 가능성 높음. CORS 프록시 사용을 권장합니다)`
        };
      }
      
      // 테이블이 없는 경우 정상 (테스트 테이블이 없을 수 있음)
      if (error.code === '42P01' || error.code === 'PGRST116') {
        return {
          success: true,
          error: null
        };
      }
      
      return {
        success: false,
        error: `REST API 요청 실패: ${error.message}`
      };
    }
    
    return {
      success: true,
      error: null
    };
  } catch (err: any) {
    // HTTP URL을 사용하고 있는지 확인
    const url = getSupabaseUrl();
    const isHttpUrl = url.startsWith('http:') && !url.startsWith('http://localhost');
    
    if (err.message && err.message.includes('Failed to fetch') && isHttpUrl) {
      return {
        success: false,
        error: `REST API 테스트 실패: ${err.message} (CORS 프록시 사용시 정상 작동합니다. 설정에서 프록시를 활성화해보세요)`
      };
    }
    
    return {
      success: false,
      error: `REST API 테스트 예외: ${err.message || '알 수 없는 오류'}`
    };
  }
};
