import type { BusinessParams, SystemConfig } from './types'
import TtsController from './tts-controller'

let systemConfig: SystemConfig

const defaultBusinessParams: BusinessParams = {
  aue: 'raw',
  sfl: 1,
  auf: 'audio/L16;rate=16000',
  vcn: 'xiaoyan',
  speed: 50,
  volume: 50,
  pitch: 50,
  bgs: 0,
  tte: 'UTF8',
  reg: '2',
  rdn: '0',
}

/**
 * 用于管理文本转语音的配置和创建实例
 */
export default {
  /**
   * 配置系统参数。
   * @param {SystemConfig} _systemConfig - 系统配置参数。
   * @returns {object} 返回当前对象，支持链式调用。
   */
  config(_systemConfig: SystemConfig) {
    systemConfig = _systemConfig

    return this
  },
  /**
   * 创建文本转语音控制器实例。
   * @param {Partial<BusinessParams>} [_businessParams] - 业务参数，默认为空对象。
   * @returns {TtsController} 返回TtsController实例。
   * @throws {Error} 如果系统配置未设置或API_KEY、API_SECRET、APPID为空，则抛出错误。
   */
  create(_businessParams: Partial<BusinessParams> = {}): TtsController {
    const { API_KEY, API_SECRET, APPID } = systemConfig
    if (!systemConfig) {
      throw new Error('请先调用config方法进行配置')
    }
    if (!API_SECRET) {
      throw new Error('API_SECRET不能为空')
    }
    if (!APPID) {
      throw new Error('APPID不能为空')
    }
    if (!API_KEY) {
      throw new Error('API_KEY不能为空')
    }

    const businessParams = {
      ...defaultBusinessParams,
      ..._businessParams,
    }

    return new TtsController(systemConfig, businessParams)
  },
}
