// 测试 PostgREST API 连接
import { setTimeout } from 'node:timers/promises';

// 配置信息
const apiUrl = 'http://nas.7bm.co:54302/api/docauditai';
const apiToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYXBpX3VzZXIifQ.KVLm7rZOF0MuX3MR9LqiYA14gba-MaDK_EQXrJ9u5_Y';

// 增加超时设置
const fetchWithTimeout = async (url, options, timeout = 10000) => {
  const controller = new AbortController();
  const timeoutId = setTimeout(() => controller.abort(), timeout);
  
  try {
    const response = await fetch(url, {
      ...options,
      signal: controller.signal
    });
    clearTimeout(timeoutId);
    return response;
  } catch (error) {
    clearTimeout(timeoutId);
    throw error;
  }
};

async function testPostgREST() {
  try {
    console.log('测试 PostgREST API 连接...');
    console.log(`API URL: ${apiUrl}`);
    
    // 1. 测试连接超时问题
    console.log('\n1. 尝试连接 - 基本网络检查');
    try {
      console.log(`正在ping ${new URL(apiUrl).hostname}...`);
      
      // 使用简单的fetch检查是否可以连接（即使返回404等错误也表示网络层面是通的）
      const pingResponse = await fetchWithTimeout(apiUrl, { 
        method: 'HEAD',
        timeout: 5000
      }, 5000);
      
      console.log(`服务器响应：HTTP ${pingResponse.status}`);
    } catch (pingError) {
      console.error('网络测试失败:', pingError.name, pingError.message);
      if (pingError.name === 'AbortError') {
        console.error('连接超时 - 请检查服务器地址和端口是否正确，或者服务器是否在线');
      }
      if (pingError.cause) {
        console.error('错误原因:', pingError.cause);
      }
      
      // 不要继续测试
      return;
    }
    
    // 2. 测试健康检查端点
    console.log('\n2. 测试健康检查端点');
    try {
      const healthResponse = await fetchWithTimeout(`${apiUrl}/health`, {
        headers: {
          'Authorization': `Bearer ${apiToken}`
        }
      });
      
      if (healthResponse.ok) {
        const healthData = await healthResponse.json();
        console.log('健康检查响应:', healthData);
      } else {
        console.log('健康检查失败:', healthResponse.status);
        console.log('响应内容:', await healthResponse.text());
      }
    } catch (healthError) {
      console.error('健康检查请求错误:', healthError);
    }
    
    // 3. 尝试获取模式信息
    console.log('\n3. 尝试获取模式信息');
    try {
      const schemaResponse = await fetchWithTimeout(`${apiUrl}/`, {
        headers: {
          'Authorization': `Bearer ${apiToken}`,
          'Accept': 'application/json'
        }
      });
      
      if (schemaResponse.ok) {
        const schemaData = await schemaResponse.json();
        console.log('获取到数据库模式信息:', 
          Object.keys(schemaData).length > 0 ? Object.keys(schemaData) : schemaData);
      } else {
        console.log('获取模式信息失败:', schemaResponse.status);
        console.log('响应内容:', await schemaResponse.text());
      }
    } catch (schemaError) {
      console.error('获取模式信息错误:', schemaError);
    }
    
  } catch (error) {
    console.error('测试过程出现错误:', error);
    if (error.cause) {
      console.error('错误原因:', error.cause);
    }
  }
}

// 执行测试
testPostgREST(); 