import { DataSource, In } from 'typeorm';
import { FeieApiConfig } from '../../types/feie.types';

/**
 * 获取飞鹅API配置
 */
export async function getFeieApiConfig(tenantId: number, dataSource: DataSource): Promise<FeieApiConfig | null> {
  try {
    console.debug(`开始获取租户 ${tenantId} 的飞鹅API配置`);

    // 从 feie_config_mt 表获取飞鹅API配置
    const configKeys = [
      'feie.api.user',      // 飞鹅API用户
      'feie.api.ukey',      // 飞鹅API密钥
      'feie.api.base_url',  // 飞鹅API基础URL
      'feie.api.timeout',   // API超时时间
      'feie.api.max_retries' // 最大重试次数
    ];

    // 直接查询数据库
    const configRepository = dataSource.getRepository('feie_config_mt');
    console.debug(`查询数据库，租户ID: ${tenantId}, 配置键: ${configKeys.join(', ')}`);

    const configs = await configRepository.find({
      where: {
        tenantId,
        configKey: In(configKeys)
      }
    });

    console.debug(`找到 ${configs.length} 条配置记录`);

    // 转换为键值对
    const configMap: Record<string, string> = {};
    configs.forEach((config: any) => {
      configMap[config.configKey] = config.configValue;
      console.debug(`配置键: ${config.configKey}, 值: ${config.configValue}`);
    });

    // 检查必要的配置项
    const user = configMap['feie.api.user'];
    const ukey = configMap['feie.api.ukey'];

    if (!user || !ukey) {
      console.warn(`[租户${tenantId}] 飞鹅API配置不完整，缺少user或ukey`);
      console.debug(`当前配置映射:`, JSON.stringify(configMap, null, 2));
      return null;
    }

    // 返回配置结构
    const feieConfig = {
      user,
      ukey,
      baseUrl: configMap['feie.api.base_url'] || 'https://api.feieyun.cn/Api/Open/',
      timeout: parseInt(configMap['feie.api.timeout'] || '10000', 10),
      maxRetries: parseInt(configMap['feie.api.max_retries'] || '3', 10)
    };

    console.debug(`租户 ${tenantId} 的飞鹅API配置获取成功:`, JSON.stringify(feieConfig, null, 2));
    return feieConfig;
  } catch (error) {
    console.warn(`[租户${tenantId}] 获取飞鹅API配置失败:`, error);
    return null;
  }
}