export default {
  /**
   * 客户端信息
   * @typedef {Object} ClientInfo 
   * @property {string} family 客户端名称，取值说明：hypcexe PC观众端；hyanchor PC主播端；
   * @property {string} version 客户端版本
   */
  /**
   * 浏览器信息
   * @typedef {Object} BrowserInfo 
   * @property {number} baseVersion 浏览器基础版本
   * @property {string} family 浏览器名称
   * @property {string} version 浏览器版本
   */
  /**
   * UA信息
   * @typedef {Object} UserAgentInfo 
   * @property {BrowserInfo} browser 浏览器信息
   * @property {ClientInfo} client 客户端信息
   * @property {any} device 其他UA信息
   */
  /**
   * 获取客户端UA信息
   * @returns {UserAgentInfo}
   */
  getUAInfo() {
    const temp = {
      device: {},
      browser: {},
    }

    try {
      const ua = navigator.userAgent
      // 规范自定义的 pc exe 命名，统一格式
      const uastr = ua.replace('huya-pc exe', `hypcexe`)
      // 去掉uastr中括号内的内容后 分割
      const infos = uastr.replace(/\(([^)]+)\)/g, '').replace(/\s+/g, ' ').split(' ')
      // 提取 ua 中可读信息
      infos.forEach(str => {
        const info = str.split('/')
        if (info[0] && info[1]) {
          const key = info[0].toLowerCase()
          temp.device[key] = info[1]
        }
      })

      // 提取 client 信息 部分版本没有此信息
      if (temp.device.hyanchor) {
        temp.client = {
          family: "hyanchor", // 主播端
          version: temp.device.hyanchor,
        }
      } else if (temp.device.hypcexe) {
        temp.client = {
          family: "hypcexe", // 客户端
          version: temp.device.hypcexe,
        }
      }

      // 解析浏览器类型
      const browserRegex = /(Firefox|Opera|OPR|Trident|Edge|Chrome|Safari)[/\s]([\d.]+)/;
      const browserMatch = ua.match(browserRegex);
      const browserVersion = browserMatch ? browserMatch[2] : "";
      temp.browser = {
        family: browserMatch ? browserMatch[1] : "Unknown",
        version: browserVersion,
        baseVersion: Number((browserVersion && browserVersion.split('.')[0]) || 0)
      }

    } catch (err) {
      console.warn(err)
    }
    return temp
  }
}