import type { BusinessParams } from './types'
import { isIos } from '@minto-ai/tools'
import TtsController from './tts-controller'

import 'core-js'

function requestAudioPermission(): Promise<MediaStream> {
  return new Promise((resolve, reject) => {
    navigator.mediaDevices
      .getUserMedia({ audio: true })
      .then((stream) => {
        resolve(stream)
      })
      .catch((error) => {
        if (error.name === 'NotAllowedError') {
          reject(new Error('用户拒绝了音频权限请求'))
        }
        else if (error.name === 'NotFoundError') {
          reject(new Error('设备上没有可用的音频输入设备'))
        }
        else {
          reject(new Error(`音频权限请求失败: ${error.message}`))
        }
      })
  })
}

/**
 * 用于管理文本转语音的配置和创建实例
 */
export default {
  /**
   * 配置系统参数。
   * @returns {object} 返回当前对象，支持链式调用。
   */
  config() {
    /**
     * @iss IOS浏览器无法文字转语音，需要申请权限
     */
    if (isIos()) {
      requestAudioPermission().catch((error) => {
        throw new Error(error.message)
      })
    }

    return this
  },
  /**
   * 创建文本转语音控制器实例。
   * @param {Partial<BusinessParams>} [businessParams] - 业务参数，默认为空对象。
   * @returns {TtsController} 返回TtsController实例。
   */
  create(businessParams: Partial<BusinessParams> = {}): TtsController {
    return new TtsController(businessParams)
  },
}
