import { MenuData } from '@/api/system/menu/types'

export const roluData = (data: Array<any>): Array<MenuData> => {
  const list = data.map(function arrMap(ls): MenuData {
    const children = ls.children.map((lss) => {
      return arrMap(lss)
    })
    return {
      id: ls.id,
      path: ls.menu_path,
      status: ls.is_show,
      unique_auth: ls.unique_auth,
      parentId: ls.pid,
      type: ls.auth_type || 0,
      apiUrl: ls.api_url,
      methods: ls.methods,
      sort: ls.sort,
      title: ls.title,
      up_icon: [ls.up_icon],
      up_icon_c: [ls.up_icon_c],
      meta: {
        icon: ls.icon,
        title: ls.title,
        activeMenu: ls.extend?.meta?.activeMenu,
        hidden: !!ls.is_show_path,
        alwaysShow: !!ls.extend?.meta?.alwaysShow,
        noCache: !!ls.extend?.meta?.noCache,
        breadcrumb: !!ls.extend?.meta?.breadcrumb,
        affix: !!ls.extend?.meta?.affix,
        noTagsView: !!ls.extend?.meta?.noTagsView,
        canTo: !!ls.extend?.meta?.canTo,
        permissionList: ls.extend?.permissionList
      },
      children
    }
  })
  return list
}

export const loginRoluData = (data: any[]): any[] => {
  const menus = data.map(function arrMap(ls) {
    const ar: MenuData = {
      path: ls.path,
      meta: {
        icon: ls.icon,
        title: ls.title,
        activeMenu: ls.extend?.meta.activeMenu,
        alwaysShow: !!ls.extend?.meta.alwaysShow,
        noCache: !!ls.extend?.meta.noCache,
        breadcrumb: !!ls.extend?.meta.breadcrumb,
        affix: !!ls.extend?.meta.affix,
        noTagsView: !!ls.extend?.meta.noTagsView,
        canTo: !!ls.extend?.meta.canTo,
        hidden: !!ls.extend?.meta.hidden,
        permissionList: ls.extend?.permissionList
      }
    }
    if (ls.children && ls.children.length > 0) {
      ar.children = ls.children.map((lss) => {
        return arrMap(lss)
      })
    }
    return ar
  })
  return menus
}

/**
 * 将Base64编码的字符串转换为Blob对象
 * 此函数主要用于处理图像或其他二进制数据的Base64表示形式，并将其转换为Blob对象，以便于在Web应用程序中使用
 * @param base64 Base64编码的字符串，通常以'data:image/jpeg;base64,'开头，后跟实际的Base64数据
 * @returns 返回一个Promise，解析为包含二进制数据的Blob对象
 */
export const parseBlob = (base64) => {
  // 分割Base64字符串，获取MIME类型和实际的Base64数据
  const arr = base64.split(',')
  // 提取MIME类型，如'image/jpeg'
  const mime = arr[0].match(/:(.*?);/)[1]
  // 将Base64数据转换为二进制字符串
  const bstr = atob(arr[1])
  // 获取二进制字符串的长度
  const n = bstr.length
  // 创建一个Uint8Array来存储二进制数据
  const u8arr = new Uint8Array(n)
  // 将二进制字符串转换为Uint8Array
  for (let i = 0; i < n; i++) {
    u8arr[i] = bstr.charCodeAt(i)
  }
  // 使用Uint8Array创建并返回Blob对象
  return new Blob([u8arr], { type: mime })
}
/**
 * 将Base64编码的图片数据转换为File对象
 *
 * @param base64 Base64编码的图片数据
 * @param name 图片文件的名称
 * @returns 返回一个File对象，用于后续的图片上传或其他操作
 */
export const base64ToImage = (base64, name) => {
  // 解析Base64编码的图片数据为Blob对象
  const image = parseBlob(base64)
  // 使用Blob对象创建一个新的File对象，并指定文件名称和类型
  const upFial = new File([image], `${name}.${image.type.split('/')[1]}`, {
    type: image.type
  })
  // 返回创建的File对象
  return upFial
}
