import axios from "axios";
import { showToast, showFailToast } from "vant";
import "vant/es/toast/style";

// 1. 创建 axios 实例
const service = axios.create({
  // 基础 URL，通常在 .env 文件中配置 VUE_APP_BASE_API
  baseURL: process.env.VUE_APP_BASE_API || "/api",
  // 请求超时时间 (毫秒)，交易类应用建议设置短一点，比如 10秒
  timeout: 10000,
  headers: {
    "Content-Type": "application/json;charset=utf-8",
  },
});

// 2. 请求拦截器 (Request Interceptor)
service.interceptors.request.use(
  (config) => {
    // 假设你的 token 存在 localStorage 里
    const token = localStorage.getItem("token");

    if (token) {
      // 让每个请求携带自定义 token 请根据实际情况修改
      config.headers["Authorization"] = "JWT " + token;
      // config.headers["token"] = token;
    }
    return config;
  },
  (error) => {
    // 对请求错误做些什么
    console.log(error);
    return Promise.reject(error);
  }
);

// 3. 响应拦截器 (Response Interceptor)
// 对响应数据做点什么
service.interceptors.response.use(
  (response) => {
    const res = response.data;

    // 假设后端约定 code === 00000 为成功
    if (res.code !== "00000") {
      // 特殊处理：比如 401 表示 Token 过期，需要跳回登录页
      if (res.code === 401) {
        //以此处逻辑为准：清除本地数据，强制刷新或跳转
        localStorage.removeItem("token");
        location.reload();
      }

      // return Promise.reject(new Error(res.msg || "Error"));
    } else {
      // 成功，直接把数据剥离出来
      return res.data;
    }
  },
  (error) => {
    let message = error.message;
    if (message === "Network Error") {
      message = "后端接口连接异常";
    } else if (message.includes("timeout")) {
      message = "系统接口请求超时";
    } else if (message.includes("Request failed with status code")) {
      message = "系统接口" + message.substr(message.length - 3) + "异常";
    }

    showFailToast(message);
    return Promise.reject(error);
  }
);

export default service;
