/**
 * Browser Manager - 统一浏览器管理器
 * 使用策略模式支持多种浏览器提供商
 * 保持向后兼容，默认使用 AdsPower
 */

const BrowserFactory = require('./factory/browser-factory');
const logger = require('../../logger');

class BrowserManager {
  constructor(options = {}) {
    // 确定使用哪个提供商（默认 AdsPower 以保持向后兼容）
    const providerName = options.provider || process.env.BROWSER_PROVIDER || 'adspower';
    
    // 构建提供商配置
    const providerConfig = {
      siteName: options.siteName || 'Browser',
      ...options,
      // AdsPower 特定配置（向后兼容）
      profileId: options.profileId || process.env.ADSPOWER_USER_ID,
      apiBase: options.apiBase || process.env.ADSPOWER_API,
      apiKey: options.apiKey || process.env.ADSPOWER_API_KEY
    };
    
    // 使用工厂创建提供商
    this.provider = BrowserFactory.create(providerName, providerConfig);
    this.providerName = providerName;
    
    logger.info(providerConfig.siteName, `使用浏览器提供商: ${this.provider.getName()}`);
  }
  
  /**
   * 启动浏览器（代理到提供商）
   */
  async launch(options = {}) {
    return await this.provider.launch(options);
  }
  
  /**
   * 获取当前页面（代理到提供商）
   */
  getPage() {
    return this.provider.getPage();
  }
  
  /**
   * 获取浏览器实例（代理到提供商）
   */
  getBrowser() {
    return this.provider.getBrowser();
  }
  
  /**
   * 清除浏览器数据（代理到提供商）
   */
  async clearData() {
    return await this.provider.clearCache();
  }
  
  /**
   * 关闭浏览器（代理到提供商）
   */
  async close() {
    return await this.provider.close();
  }
  
  /**
   * 清除数据并关闭浏览器
   */
  async clearAndClose() {
    await this.clearData();
    await this.close();
  }
  
  /**
   * 获取提供商名称
   */
  getProviderName() {
    return this.providerName;
  }
  
  /**
   * 获取提供商元数据
   */
  getProviderMetadata() {
    return this.provider.getMetadata();
  }
  
  /**
   * 创建新页面
   */
  async newPage() {
    return await this.provider.newPage();
  }
}

module.exports = BrowserManager;
