/**
 * 测试脚本：验证多浏览器架构
 * 测试BrowserManager和BrowserFactory的基本功能
 */

const BrowserManager = require('./src/shared/libs/browser/browser-manager');
const BrowserFactory = require('./src/shared/libs/browser/factory/browser-factory');

async function testBrowserArchitecture() {
  console.log('========================================');
  console.log('测试多浏览器架构');
  console.log('========================================\n');

  // ============ 测试 1: BrowserFactory ============
  console.log('【测试 1】BrowserFactory 功能');
  console.log('');

  try {
    // 1.1 获取可用提供商
    const providers = BrowserFactory.getAvailableProviders();
    console.log('✅ 可用提供商:', providers);

    // 1.2 获取元数据
    const metadata = BrowserFactory.getAllProvidersMetadata();
    console.log('✅ 提供商元数据:');
    metadata.forEach(meta => {
      console.log(`  - ${meta.name} (${meta.id})`);
      console.log(`    免费: ${meta.free ? '是' : '否'}`);
      console.log(`    能力:`, meta.capabilities);
    });

    // 1.3 查找免费提供商
    const freeProviders = BrowserFactory.getFreeProviders();
    console.log('✅ 免费提供商:', freeProviders.length > 0 ? freeProviders : '暂无');

    // 1.4 查找付费提供商
    const paidProviders = BrowserFactory.getPaidProviders();
    console.log('✅ 付费提供商:', paidProviders);

    // 1.5 按能力查找
    const cloudflareProviders = BrowserFactory.findProvidersByCapability('cloudflareBypass');
    console.log('✅ 支持Cloudflare绕过的提供商:', cloudflareProviders);

    console.log('\n【测试 1】✅ 通过\n');
  } catch (error) {
    console.error('\n【测试 1】❌ 失败:', error.message);
    process.exit(1);
  }

  // ============ 测试 2: BrowserManager 向后兼容性 ============
  console.log('【测试 2】BrowserManager 向后兼容性');
  console.log('');

  try {
    // 2.1 默认创建（应该使用 AdsPower）
    const browser = new BrowserManager({
      siteName: 'Test'
    });

    console.log('✅ BrowserManager 创建成功');
    console.log('  当前提供商:', browser.getProviderName());
    console.log('  提供商元数据:', browser.getProviderMetadata());

    console.log('\n【测试 2】✅ 通过\n');
  } catch (error) {
    console.error('\n【测试 2】❌ 失败:', error.message);
    process.exit(1);
  }

  // ============ 测试 3: 显式指定提供商 ============
  console.log('【测试 3】显式指定提供商');
  console.log('');

  try {
    // 3.1 显式使用 AdsPower
    const adsBrowser = new BrowserManager({
      provider: 'adspower',
      siteName: 'AdsPowerTest'
    });

    console.log('✅ AdsPower提供商创建成功');
    console.log('  提供商名称:', adsBrowser.getProviderName());
    
    console.log('\n【测试 3】✅ 通过\n');
  } catch (error) {
    console.error('\n【测试 3】❌ 失败:', error.message);
    process.exit(1);
  }

  // ============ 测试 4: 错误处理 ============
  console.log('【测试 4】错误处理');
  console.log('');

  try {
    // 4.1 尝试使用不存在的提供商
    try {
      const invalidBrowser = new BrowserManager({
        provider: 'non-existent-provider'
      });
      console.error('❌ 应该抛出错误但没有');
    } catch (e) {
      console.log('✅ 正确处理了无效提供商:', e.message.split('\n')[0]);
    }

    console.log('\n【测试 4】✅ 通过\n');
  } catch (error) {
    console.error('\n【测试 4】❌ 失败:', error.message);
    process.exit(1);
  }

  // ============ 测试总结 ============
  console.log('========================================');
  console.log('✅ 所有测试通过！');
  console.log('========================================');
  console.log('');
  console.log('架构验证成功：');
  console.log('  ✅ 策略模式正常工作');
  console.log('  ✅ 工厂模式正常工作');
  console.log('  ✅ 向后兼容性保持');
  console.log('  ✅ 错误处理正确');
  console.log('');
  console.log('下一步：');
  console.log('  1. 添加更多免费浏览器提供商');
  console.log('  2. 创建CLI工具');
  console.log('  3. 编写集成测试');
  console.log('');
}

// 运行测试
testBrowserArchitecture().catch(error => {
  console.error('\n测试失败:', error);
  process.exit(1);
});
