import ENV_CONFIG from "@/.env.js";
import { silentLogin } from "./auth";
// api前缀
export const HTTP_URL_DEV_PREFIX = "/api";
export const HTTP_URL_PROD_PREFIX = "/api";

let envVersion = "";
let info = uni.getAccountInfoSync();
// 微信小程序：获取环境版本（开发版、体验版、正式版）
envVersion = info.miniProgram.envVersion;

// #ifdef MP-ALIPAY
// 支付宝小程序：使用 my.getRunMode 获取环境
my.getRunMode && my.getRunMode({
  success: (res) => {
    envVersion = res.runMode;
    console.log(envVersion, "envVersion");
  },
});
// #endif

const env = ENV_CONFIG[envVersion == "release" ? "production" : "development"];

// 基于uview-ui的http配置
export const UVIEWUI_HTTP_CONFIG = {
  // 地址
  baseUrl: env.apiUrl + env.apiUrlPrefix,
  // 请求方式
  method: "post",
  // 参数类型
  dataType: "json",
  // 是否显示请求中的loading
  showLoading: true,
  // 请求loading中的文字提示
  loadingText: "请求中...",
  // 在此时间内，请求还没回来的话，就显示加载中动画，单位ms
  loadingTime: 800,
  // 是否在拦截器中返回服务端的原始数据
  originalData: true,
  // 展示loading的时候，是否给一个透明的蒙层，防止触摸穿透
  loadingMask: true,
  // header:{
  // 	token:uni.getStorageSync('token')
  // },
};

// 此处配置请求拦截器
export const httpRequest = (config) => {
  const token = uni.getStorageSync("token");
  config.header.Authorization = token ? `Bearer ${token}` : "";
  return config;
};

// 此处配置响应拦截器
export const httpResponse = (res) => {
  return new Promise(function (resolve, reject) {
    if (res.statusCode == 200) {
      if (res.data.code !== 200) {
        uni.showToast({
          icon: "none",
          title: res.data.msg || "服务器异常，请联系客服",
        });
        return resolve(res.data);
      }
      if (res.data.code == 401) {
        console.log("接口未登录>>>>4011",res.data.code);
        // 尝试静默登录
        silentLogin()
          .then((data) => {
            // 登录成功，重新发起之前失败的请求
            uni.$u.http.request(res.config).then(resolve).catch(reject);
          })
          .catch(() => {
            // 登录失败，跳转首页
            uni.switchTab({
              url: "/pages/home/index",
            });
            reject(res.data);
          });
        return resolve(res.data);
      }
      return resolve(res.data);
    }
    if (res.statusCode == 401) {
      console.log("接口未登录>>>>401",res.statusCode);
      silentLogin()
        .then((data) => {
          // 登录成功，重新发起之前失败的请求
          uni.$u.http.request(res.config).then(resolve).catch(reject);
        })
        .catch(() => {
          // 登录失败，跳转首页
          uni.switchTab({
            url: "/pages/home/index",
          });
          reject(res.data);
        });
      return resolve(res.data);
    }
    if (res.statusCode == 500) {
      console.log("服务器异常>>>>500", res.config);
      uni.showToast({
        title: "服务器异常，请联系客服！",
        icon: "none",
        duration: 3000,
      });
      return resolve(res.data);
    }

    return resolve(res.data);
  });
};

// http安装方法
export const installHttpConfig = (Vue, vm) => {
  Vue.prototype.$u.http.setConfig(UVIEWUI_HTTP_CONFIG);
  Vue.prototype.$u.http.interceptor.request = httpRequest;
  Vue.prototype.$u.http.interceptor.response = httpResponse;
};
