// 运行时配置
import type { RequestConfig } from 'umi';
import { queryCurrent, queryAccess } from '@/Project/services/user';
import { STORAGE_TYPE, LocalService } from './Frameworks/SysStorage';
import { message } from 'antd';
// 全局初始化数据配置，用于 Layout 用户信息和权限初始化
// 更多信息见文档：https://next.umijs.org/docs/api/runtime-config#getinitialstate
export async function getInitialState(): Promise<any> {
  let currentUser = {},
    access = {};
  // 非登录页获取用户信息
  if (!window.GT_APP.funcLogin.IsActive) {
    try {
      currentUser = (await queryCurrent()).data;
    } catch (error) {}
    try {
      access = await queryAccess(46);
    } catch (error) {}
  }
  return { currentUser, access, projectId: 0 };
}

// axios配置
export const request: RequestConfig = {
  errorConfig: {
    errorThrower(res: Api.IResponseStructure) {
      // const { data, code, msg } = res;
      // if (code !== 200) {
      //   const error: any = new Error(msg);
      //   error.name = 'AjaxError';
      //   error.info = { code, msg, data };
      //   throw error;
      // }
      console.log('errorThrower', res);
    },
    errorHandler(error: any, opts: any) {
      if (opts?.skipErrorHandler) throw error;
      // 我们的 errorThrower 抛出的错误。
      if (error.name === 'AjaxError') {
        const errorInfo: Api.IResponseStructure | undefined = error.info;
        const inLoginPage = window.GT_APP.funcLogin.IsActive;
        if (!inLoginPage && errorInfo) {
          message.error(errorInfo.msg || errorInfo.data);
        }
      } else if (error.response) {
        // Axios 的错误
        // 请求成功发出且服务器也响应了状态码，但状态代码超出了 2xx 的范围
        message.error(`网络连接错误，请稍后重试(${error.response.status})`);
      } else if (error.request) {
        // 请求已经成功发起，但没有收到响应
        // \`error.request\` 在浏览器中是 XMLHttpRequest 的实例，
        // 而在node.js中是 http.ClientRequest 的实例
        message.error('网络连接错误，请稍后重试（服务器未返回数据）。');
      } else {
        // 发送请求时出了点问题
        message.error('网络连接错误，请稍后重试（请求发送失败）。');
      }
    },
  },
  requestInterceptors: [
    (config: any) => {
      if (!config.headers) config.headers = {};
      config.headers['JWT-TOKEN'] = LocalService.getItem(STORAGE_TYPE.token);
      return config;
    },
  ],
  responseInterceptors: [
    (res) => {
      const resData = res.data as Api.IResponseStructure;
      const { code, msg, data } = resData;
      if (code !== 200) {
        const error: any = new Error(msg);
        error.name = 'AjaxError';
        error.info = { code, msg, data };
        throw error;
      }
      return res;
    },
  ],
};
