const install = (Vue, vm) => {
  const httpConfig = {
    baseUrl: vm.config.baseUrl,
    loadingText: '努力加载中~',
    loadingTime: 800,
    originalData: true,
    dataType: 'text'
  };

  Vue.prototype.$u.http.setConfig(httpConfig);

  let isRefreshing = false;

  Vue.prototype.$u.http.interceptor.request = (config) => {
    const { url } = config;
    const { vuex_token } = vm;

    if (vuex_token) {
      config.header.Authorization = `Bearer ${vuex_token}`;
    }

    config.url = `${url}?t=${Date.now()}`;

    const noTokenList = [
      '/client/wechat/h5/code/',
      '/client/auth/sendSmsCodeV2',
      '/client/auth/verifyCodeV2',
      '/client/auth/loginToWxOpenId',
      '/client/auth/sendSmsCodeV3',
      '/client/auth/loginToMobile'
    ];

    if (noTokenList.includes(url)) {
      config.header.noToken = true;
    }

    return config;
  };

  Vue.prototype.$u.http.interceptor.response = (res) => {
    const { data } = res;

    if (data) {
      const jsonBigint = require('json-bigint')({ storeAsString: true });
      res = jsonBigint.parse(data);
      const { code, msg } = res;

      if (code === 200) {
        return res;
      } else if (code === 401 || (code === 400 && msg === '令牌不能为空')) {
        if (!isRefreshing) {
          login(vm);
          isRefreshing = true;
        }
        return false;
      } else {
        const noTipMsg = ['无任何订单'];
        const index = noTipMsg.findIndex((item) => msg?.indexOf(item) > -1);

        if (index < 0) {
          uni.showToast({
            title: res.msg || '程序错误!',
            duration: 2000,
            icon: 'none'
          });
        }

        return false;
      }
    } else {
      uni.showToast({
        title: '程序错误!',
        duration: 2000,
        icon: 'error'
      });

      return false;
    }
  };
};

const login = (vm) => {
  const backUrl = location.href;
  const openidPage = vm.config.onlyWxLogin;
  const needValidPage = openidPage.filter((item) => backUrl.includes(item));

  const ua = window.navigator.userAgent.toLowerCase();

  if (ua.includes('micromessenger')) {
    if (backUrl.indexOf('backUrl') === -1) {
      vm.$u.route('pages/wechatLogin/wechatLogin', { backUrl: encodeURIComponent(backUrl), loginType: needValidPage.length ? 2 : 1 });
    }
  } else {
    if (backUrl.indexOf('backUrl') === -1) {
      localStorage.setItem('backUrl', encodeURIComponent(backUrl));
    }
    uni.showModal({
      title: '提示',
      content: '未查询到登录信息或信息已失效, 请重新登录',
      showCancel: false,
      success: function (res) {
        if (res.confirm) {
          localStorage.removeItem('lifeData');
          uni.redirectTo({
            url: '/pages/center/phoneLogin/phoneLogin'
          });
        }
      }
    });
  }
};

export default {
  install
};
