import axios from "axios";
let baseUrl = "/api"; // 基础接口请求信息
const service = axios.create({
  validateStatus(status) {
    return status >= 200 && status <= 504; // 合法状态码
  },
  baseURL: baseUrl, // 基础请求路径
  timeout: 30000, // 请求超时
});
// 重复尝试此时
service.defaults.retry = 3;
// 重试延时
service.defaults.retryDelay = 15000;
// 开启重试
service.defaults.shouldRetry = true;
// 请求拦截
service.interceptors.request.use(
  (config) => {
    config.headers["Content-Type"] = "application/json;charset=UTF-8";
    config.headers["Accept-Language"] = "zh-CN";
    // 如果需要可以开启token，token是全局数据来自store
    // config.headers["Authorization"] = store.state.user.token;
    if (config.method === "post") {
      if (!config.data) {
        config.data = {};
      }
    }
    return config;
  },
  (error) => {
    const {
      response: { status, statusText },
    } = error;
    throw new Error(`状态码:${status},信息:${statusText},位置:request`);
  }
);
// response 拦截器
service.interceptors.response.use(
  (response) => {
    return new Promise((resolve, reject) => {
      if (response.status !== 200) {
        // 请求失败
        reject(response);
      } else {
        resolve(response.data);
      }
    }).catch((res) => {
      throw new Error(`请求失败:${res}! 位置:request.js`);
    });
  },
  (err) => {
    // 失败
    let message = "请求异常,请检测网络!";
    if (err.response) {
      message = err.response.data.message;
    }
    throw new Error(message);
  }
);

export default service;
