import n from "axios";
import { executeAxiosMiddlewares as r } from "./middlewares/middleware-executor.js";
import { logRequest as a } from "./middlewares/request-middlewares/logRequest.js";
import { addXRequestedWith as i } from "./middlewares/request-middlewares/addXRequestedWith.js";
import { disposeGetUrlParams as m } from "./middlewares/request-middlewares/dafeiyiqi-disposeGetUrlParams.js";
import { logResponse as t } from "./middlewares/response-middlewares/logResponse.js";
import { handleTokenInvalidToLogin as c } from "./middlewares/response-middlewares/handle-success/handleTokenInvalidToLogin.js";
import { handleFileStream as p } from "./middlewares/response-middlewares/handle-success/handleFileStream.js";
import { handleSuccess as d } from "./middlewares/response-middlewares/handle-success/handleSuccess.js";
import { formatResponseData as l } from "./middlewares/response-middlewares/formatResponseData.js";
import { handleError as u } from "./middlewares/response-middlewares/handle-error/handleError.js";
const f = [
  // 1. 记录请求日志
  a,
  // 2. 添加通用 X-Requested-With 到请求头
  i,
  /**
   * 3. GET请求,需要处理参数拼接到Url中（目前打非一期列表等一些接口都是用的GET请求）
   * PS: 打非二期设计人员设计的接口: 像只入参一个字段的设计成了GET请求(如此不需要中间件处理),其他但凡入参超过一个的全部设计成了post请求(如此更不需要中间件处理)
   */
  m
], w = [
  // 1. 记录响应日志
  t,
  // 2. 处理打非系统用户长时间不操作页面token失效自动去往登录页面
  c,
  // 3. 处理响应成功-文件流
  p,
  // 4. 处理响应成功
  d,
  // 5. 格式化响应数据
  l
], x = [
  // 1. 记录响应日志
  t,
  // 2. 处理错误响应
  u
], s = n.create({
  // 基础路径
  baseURL: "/",
  // 超时时间
  timeout: 6e4
  /**
   * 这句话没用,在node.js环境中有用
   * 浏览器环境： 在浏览器中，HTTP重定向是由浏览器本身处理的，而不是Axios。即使你配置了 maxRedirects: 0，浏览器会自动遵循重定向，Axios只会接收到重定向后的响应。因此，302状态码不会被Axios捕获。
   * 解决方案： 浏览器中无法阻止自动重定向，通常需要后端支持，比如返回非标准的状态码（如299）或其他标志，让前端捕获。
   */
  // maxRedirects: 0,
});
s.interceptors.request.use(
  async (e) => (await r(f, { config: e }), e),
  (e) => {
    Promise.reject(e);
  }
);
s.interceptors.response.use(
  async (e) => {
    const o = { response: e };
    return await r(w, o), o.isFileStream ? (console.log("当前我是文件流数据"), o.response) : o.response.data;
  },
  async (e) => {
    throw await r(x, { error: e }), new Error(e);
  }
);
export {
  s as default
};
