import axios from 'axios'
import { ElMessage } from 'element-plus'
import { getSessionVar,deleteSessionVar } from "@/utils/session";
// 创建 axios 实例
const http = axios.create({
  baseURL: '',  // 设置基本 URL
  timeout: 60000,                      // 设置请求超时时间
});

// 请求拦截器
http.interceptors.request.use(
  (config) => {
    // 在发送请求之前做些什么
    // console.log('请求被拦截:', config);
    // 例如：添加 token 到请求头
    // config.headers['Authorization'] = 'Bearer your_token_here';
    if (getSessionVar('session_id') != null && getSessionVar('username') != null){
            config.headers.Authorization = 'Beaver ' + getSessionVar('username') + ' ' + getSessionVar('session_id');
      }
    return config;  // 必须返回 config，否则请求不会被发送
  },
  (error) => {
    // 请求错误时做些什么
    ElMessage({
      message: "请求错误:" + error,
      type: "warning"
    })
    console.log('请求错误:', error);
    return Promise.reject(error);  // 必须返回一个 rejected promise 否则请求会卡住
  }
);

// 响应拦截器
http.interceptors.response.use(
  (response) => {
    // 对响应数据做些什么
    // 可以在此处理响应数据
    const { data, code, message } = response.data
    if (code === 200) {
      return data || response.data
    } else {
      ElMessage({
        message: message,
        type: "error"
      })
      return Promise.reject(message)
    }
    // return response.data;  // 这里直接返回 response.data，方便后续使用
  },
  (error) => {
    // 响应错误时做些什么
    // 根据错误类型做相应处理
    if (error.response) {
      // 请求已发出，服务器响应了状态码，但状态码超出了 2xx 的范围

      ElMessage({
        message: "服务器响应错误:" + error.response.status,
        type: "warning"
      })

    } else if (error.request) {
      // 请求已经发出，但没有收到响应

      ElMessage({
        message: "没有收到响应",
        type: "warning"
      })
    } else if (error.code === 'ECONNABORTED') {
      ElMessage({
        message: "请求超时,请稍后重试！",
        type: "warning"
      })
    }
    else {
      // 其他错误
      ElMessage({
        message: error.message,
        type: "warning"
      })
    }
    console.log('请求错误:', error.message);
    return Promise.reject(error);  // 继续抛出错误
  }
);

export default http;

