﻿﻿import type { RequestOptions } from '@@/plugin-request/request';
import type { RequestConfig } from '@umijs/max';
import { message, notification } from 'antd';
import { history } from '@umijs/max';


// 错误处理方案： 错误类型
enum ErrorShowType {
  SILENT = 0,
  WARN_MESSAGE = 1,
  ERROR_MESSAGE = 2,
  NOTIFICATION = 3,
  REDIRECT = 9,
}
// 与后端约定的响应数据格式
interface ResponseStructure {
  success: boolean;
  data: any;
  errorCode?: number;
  errorMessage?: string;
  showType?: ErrorShowType;
}

/**
 * @name 错误处理
 * pro 自带的错误处理， 可以在这里做自己的改动
 * @doc https://umijs.org/docs/max/request#配置
 */
// 声明全局变量 BASE_URL（由 config.ts 中的 define 配置注入）
declare const BASE_URL: string;

export const errorConfig: RequestConfig = {
  // 直接使用 BASE_URL，不走代理，直接调用接口
  baseURL: BASE_URL,

  // 请求拦截器
  requestInterceptors: [
    (config: RequestOptions) => {
      const o = config
      const Authorization = localStorage.getItem('token') || ''

      o.headers = {
        ...config.headers,
        Authorization,
      }
      // 拦截请求配置，进行个性化处理。
      const url = config?.url

      return { ...config, url };
    },
  ],

  // 响应拦截器
  responseInterceptors: [
    (response: any) => {
      // 拦截响应数据，进行个性化处理
      const { data } = response as unknown as ResponseStructure;
      if (data?.code === 103 || data?.code === 401) {
        localStorage.clear()
        history.replace('/login')
        return Promise.resolve(response)
      }
      if (data?.code != 200) {
        message.error(data.msg);
        return Promise.reject(response)
      }

      if (data?.code == 500 || data.data?.code == 500) {
        message.error(data.msg);
        return Promise.reject(response)
      }
      if (data.code == 200) {
        return Promise.resolve(response)
      }

      return Promise.resolve(response)
    },
  ],
};
