import {
  config
} from '@/config/app';

import useUserStore from '@/store/user';

const userStore = useUserStore();

function baseRequest(url, method, data, {
  noAuth = false,
  noVerify = false,
  onReLogin = false
}) {
  let Url = config.HTTP_REQUEST_URL,
    header = config.HEADER;
  if (userStore.userInfo) {
    header.TOKEN = userStore.token
  }

  return new Promise((reslove, reject) => {
    uni.request({
      url: Url + '/api' + url,
      method: method || 'GET',
      header: {
        ...header
      },
      data: method != 'GET' ? data || {} : {},
      params: method == 'GET' ? data : {},
      success: (res) => {
        if (res.data.show) {
          uni.showToast({
            title: res.data.msg || '操作成功',
            icon: 'none',
          })
        }
        if (noVerify)
          reslove(res.data);
        else if (res.data.code == -1) {
          if (res.data.msg == "登录超时,请重新登录") {
            userStore.setToken('');
            userStore.setUserInfo({});
            uni.reLaunch({
              url: '/pages/login/login'
            })
          }
        } else if (res.data.code == 0) {
          reject(res.data);
        } else if (res.data.code == 1) {
          reslove(res.data);
        } else if (res.data.code == 200) {
          reslove(res.data.data);
        } else if ([410000, 410001, 410002, 40000].indexOf(res.data.code) !== -1) {
          reject(res.data);
        } else if (res.data.code == 501) {
          reject(res.data);
        } else {
          reject(res.data.msg || '请检查网络');
        }
      },
      fail: (message) => {
        console.log(message, '错误')
        uni.showToast({
          title: '网络错误',
          icon: 'none'
        })
        reject('请求失败');
      }
    })
  });
}
const syhttp = {};

['options', 'get', 'post', 'put', 'head', 'delete', 'trace', 'connect'].forEach((method) => {
  syhttp[method] = (api, data, opt) => baseRequest(api, method, data, opt || {})
});
export default syhttp;