// 自定义axios

// 引入路由实例
import router from "@/router";
// 单独引入element-ui里面的提示框
import { Message } from "element-ui";
console.log(router, Message);
// 定义接口的前缀
let URL = "";
// 自动判断环境是开发环境还是生产环境，自动拼接对应的接口前缀
// 开发环境-----本地运行，接口前缀拼接域名
if (process.env.NODE_ENV == "development") {
  URL = "http://81.70.146.224:11500";
}
// 生产环境---线上服务器，接口前缀自动拼接IP地址
else {
  URL = "http://81.70.146.224:11500";
}
console.log(URL);
const token = localStorage.getItem("token");
// 1 引入axios
import axios from "axios";
// 2 创建一个axios实例，配置axios
// this.$名称({}) / axios({}) ====> serve({})
const serve = axios.create({
  // 接口的前缀，相当于axios.default.baseURL
  baseURL: URL,
  //  设置超时时间，请求数据超过五秒就不再去请求接口了
  timeout: 5000,

  // 设置请求头全部设置请求头,无论是get请求还是post及其他请求都会设置.
  headers: {
    Authorization: `${token}`,
    "Content-Type": "application/json",
    Accept: "application/json",
  },
  // 请求数据类型
  dataType: "json",
});

// 请求拦截:---发送请求的时候,post发送请求头,get不传递请求头(设置请求头)
// serve.interceptors.request.use((config) => {
//   // console.log(config.method,"获取请求方式")
//   // console.log(config.headers,"获取请求头")
//   // console.log(config.url,"获取请求地址")

//   // 当接口不是登录或者是注册接口的时候传递token
//   if (config.url != "/login" || config.url != "/register") {
//     config.headers["token"] = localStorage.getItem("token");
//   }
//   // 必须返回config
//   return config;
// });
// 响应拦截---如果数据请求成功了,如果是200返回数据,如果状态码不是200,弹出错误信息 (判断状态码谈提示)
serve.interceptors.response.use((res) => {
  if (res.data.code == 200) {
    return res.data;
  } else if (res.data.code == 101) {
    Message.error(res.data.msg);
  } else if (res.data.code == 199) {
    Message.error(res.data.msg);
  } else if (res.data.code == 401) {
    Message.error(res.data.msg);
  } else if (res.data.code == 188) {
    Message.error(res.data.msg);
  } else if (res.data.code == 500) {
    Message.error(res.data.msg);
    // 跳转登录页面
    // router.push({
    //   path: "/",
    // });
    Message.error(res.data.msg);
  } else {
    Message.error(res.data.msg);
  }
});
// // 导出serve
export { serve };
// 导出一个函数
export let http = (url, method = "post", data) => {
  // get请求
  if (method == "get") {
    return new Promise((resolve, reject) => {
      serve({
        method: method,
        url: url,
        params: data,
      })
        .then((res) => {
          resolve(res);
        })
        .catch((err) => {
          reject(err);
        });
    });
  } else {
    // post/put/delete请求
    return new Promise((resolve, reject) => {
      serve({
        method: method,
        url: url,
        data: data,
      })
        .then((res) => {
          resolve(res);
        })
        .catch((err) => {
          reject(err);
        });
    });
  }
};

// http("接口地址","请求方式","传递的数据")这个函数的结果是Promise对象,Promise的结果成功就是里面resolve里面的值，失败就是reject里面的值
