/**
 * 从字符串中获取方法名
 * vnd.sun.star.script:BookmarkOP.py$QueryAllWithJSON?language=Python&location=share
 * @param input
 */
export function extractMethodName(input: string): string | null {
  // 查找最后一个 $ 的位置
  const dollarIndex = input.lastIndexOf('$')
  if (dollarIndex === -1)
    return null

  // 截取 $ 之后的部分
  const afterDollar = input.slice(dollarIndex + 1)

  // 查找参数分隔符 ?
  const questionMarkIndex = afterDollar.indexOf('?')

  // 返回方法名部分
  return questionMarkIndex === -1
    ? afterDollar
    : afterDollar.substring(0, questionMarkIndex)
}

/**
 * 判断当前环境是不是Https的
 */
export function isHttps() {
  return window.location.protocol === 'https:'
}

/**
 * base64转为二进制数据
 * @param base64
 * @param mimeType 文件MIME类型
 */
export function base64ToBlob(base64: string, mimeType: string) {
  // 1. 使用 atob 将 Base64 字符串解码为二进制字符串
  const binaryString = atob(base64)

  // 2. 创建一个与二进制字符串长度相同的 Uint8Array
  const len = binaryString.length
  const bytes = new Uint8Array(len)

  // 3. 将二进制字符串的每个字符转换为字节并存储在 Uint8Array 中
  for (let i = 0; i < len; i++)
    bytes[i] = binaryString.charCodeAt(i)

  // 4. 使用 Uint8Array 创建 Blob 对象
  return new Blob([bytes], { type: mimeType })
}

/**
 * ArrayBuffer转为Base64编码
 * @param arrayBuffer
 */
export function encodeBase64(arrayBuffer: ArrayBuffer): string {
  // 将 ArrayBuffer 转换为二进制字符串
  const binaryString = Array.from(new Uint8Array(arrayBuffer))
    .map(byte => String.fromCharCode(byte))
    .join('')

  // 将二进制字符串转换为 Base64
  return btoa(binaryString)
}
