import axios from "axios";
import { message } from "antd";

// 创建 axios 实例
const request = axios.create({
  baseURL: "http://192.168.10.174:8080/api",
  timeout: 10000,
});

// 请求拦截器
request.interceptors.request.use(
  (config) => {
    // 从 localStorage 获取 token
    const token = localStorage.getItem("token");

    // 如果有 token 则添加到请求头
    if (token) {
      config.headers["token"] = token;
    }

    // 角色检查
    if (config.url.startsWith("/api/admin") && !hasAdminRole()) {
      return Promise.reject(new Error("无权限执行此操作"));
    }

    console.log("发出的请求", config);
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

// 辅助函数：检查是否有管理员角色
function hasAdminRole() {
  const user = JSON.parse(localStorage.getItem("user") || "{}");
  return user.role === "admin";
}

// 响应拦截器
request.interceptors.response.use(
  (response) => {
    return response.data;
  },
  (error) => {
    if (error.response) {
      const { status, data } = error.response;

      // 处理 401 未授权错误（token 无效或过期）
      if (status === 401) {
        message.error("登录已过期，请重新登录");

        // 清除本地存储的 token 和用户信息
        localStorage.removeItem("token");
        localStorage.removeItem("user");

        // 重定向到登录页
        if (window.location.pathname !== "/login") {
          window.location.href = "/login";
        }
      } else {
        // 处理其他错误
        // message.error(data.message || "11111请求失败");
        message.error(data.message || "11111请求失败");
      }
    } else if (error.request) {
      // 请求发出但没有收到响应
      message.error("网络错误，请检查您的网络连接");
    } else {
      // 请求配置出错
      message.error("请求配置错误");
    }

    return Promise.reject(error);
  }
);

export default request; 