import { createAlova } from 'alova'
import VueHook from 'alova/vue'
import adapterFetch from 'alova/fetch'
import { createDiscreteApi } from 'naive-ui'

const { message } = createDiscreteApi(['message'])
const { dialog }  = createDiscreteApi(['dialog'])
const statusCode = {
  "5005": "场景不存在",
  "5012": "数据不正常",
  "5014": "您没有该场景的编辑权限。",
  "5018": "zip 文件只能有一层目录或无目录",
  "5019": "必须有且仅有一个 obj 和 mtl 文件",
  "5020": "贴图需控制在 1.5MB 以内，obj 文件需要控制在 20MB 以内。",
  "5021": "场景密钥不正确",
  "5025": "数据包不存在，请先打成 zip 包",
  "5033": "计算中",
  "5034": "场景已封存",
  "5039": "系统繁忙，请稍后再试。",
  "5043": "打包 zip 失败",
  "5059": "该压缩包无可用 obj 或 mtl 文件",
  "5060": "obj 文件名应为 mesh.obj",
  "5062": "无可用 jpg文件",
  "5065": "上传失败。zip 压缩包内所有文件如贴图、obj、mtl 等需放在根目录同一个文件夹中。",
  "5066": "后台正在处理您的请求，耐心等待。",
  "5068": "json 文件丢失，请在原始文件中找到该文件并重新打包上传。",
  "5069": "json 文件错误，请在原始文件中找到该文件并重新打包上传。",
  "5070": "请上传正确的楼层文件，文件数量需与原始文件一致。",
  "7004": "热点数据不能为空",
  "7005": "查询不到热点数据",
  "7006": "目录不存在",
  "7007": "文件格式不正确",
  "7009": "球幕视频文件不存在",
  "7010": "相机或者相机详情不存在",
  "7012": "上传的文件名错误",
  "7013": "上传失败",
  "7015": "仅支持 zip 文件上传",
  "7016": "仅支持 mp4 格式文件",
  "7018": "压缩包内请勿包含文件夹",
  "-3": "缺少必要参数",
  "-4": "跨服务请求失败",
  "-5": "系统繁忙，请稍后再试",
  "none": "未知错误"
}


export * from './url'

export const Alova = createAlova({
  baseURL: '',
  statesHook: VueHook,
  requestAdapter: adapterFetch(),
  timeout: 3000,
  cacheFor: null,
  cacheLogger: process.env.NODE_ENV === 'development',
  beforeRequest(method) {
    const token = localStorage.getItem('token')
    if (token) {
      method.config.headers.token = token
    }
  },
  responded: {
    onSuccess: async (response, method) => {
      const res = (response.json && (await response.json())) || response.body

      // 是否返回原生响应头 比如：需要获取响应头时使用该属性
      if (method.meta?.isReturnNativeResponse) {
        return res
      }
      // 请根据自身情况修改数据结构
      const { message, code, data } = res

      // 不进行任何处理，直接返回
      // 用于需要直接获取 code、result、 message 这些信息时开启
      if (method.meta?.isTransformResponse === false) {
        return res.data
      }
      // debugger
      // console.log(message, code, data)
      if (code === 0) {
        return data
      } else {
        dialog.warning({
          closable:false,
          closeOnEsc: false,
          maskClosable: false,
          content: statusCode[code] || message || '加载失败'
        })
        return false
      }
    }
  }
})
