/** Request 网络请求工具 更详细的 api 文档: https://github.com/umijs/umi-request */
import { extend } from 'umi-request';

import { notification } from 'antd';

import Cookies from 'js-cookie';
import moment from 'moment';
import session from './session';
import type { CurrentUser } from '@/models/user';
import { SynchroBEHAVIORRECORD } from '@/services/user';
import { encryptAES } from './handleAes';

const codeMessage: Record<number, string> = {
  200: '服务器成功返回请求的数据。',
  201: '新建或修改数据成功。',
  202: '一个请求已经进入后台排队（异步任务）。',
  204: '删除数据成功。',
  400: '发出的请求有错误，服务器没有进行新建或修改数据的操作。',
  401: '用户没有权限（令牌、用户名、密码错误）。',
  403: '用户得到授权，但是访问是被禁止的。',
  404: '发出的请求针对的是不存在的记录，服务器没有进行操作。',
  406: '请求的格式不可得。',
  410: '请求的资源被永久删除，且不会再得到的。',
  422: '当创建一个对象时，发生一个验证错误。',
  500: '服务器发生错误，请检查服务器。',
  502: '网关错误。',
  503: '服务不可用，服务器暂时过载或维护。',
  504: '网关超时。',
};

/**
 * @zh-CN 异常处理程序
 * @en-US Exception handler
 */
const errorHandler = (error: { response: Response }): Response => {
  const { response } = error;


  if (response && response.status) {
    const errorText = codeMessage[response.status] || response.statusText;
    const { status, url } = response;

    notification.error({
      message: `请求错误 ${status}: ${url}`,
      description: errorText,
    });
  } else if (!response) {
    notification.error({
      description: '您的网络异常，无法连接到服务器.',
      message: '网络异常',
    });
  }
  return response;
};
/**
 * @en-US Configure the default parameters for request
 * @zh-CN 配置request请求时的默认参数
 */
const request = extend({
  errorHandler, // default error handling
  // prefix: '/EShangApiMain',//  开发
  // prefix: 'https://api.eshangtech.com/EShangApiMain', // 正式
  prefix: 'http://pos.eshangtech.com:8900/EShangApiMain', // 正式
  headers: {
    token: '',
    ProvinceCode: '',
    ServerpartCodes: '',
    // tmp: (new Date()).getTime()
  }

  // credentials: 'include', // Does the default request bring cookies

});

// 存一下进来调用的值
// let userbeHaviObj: any = {}


// request拦截器, 改变url 或 options.
request.interceptors.request.use((url, opt: any) => {
  const options = { ...opt }
  const currentUser: CurrentUser = session.get('currentUser');
  // let userbeHaviObj = {
  //   url: url,
  //   options: options,
  //   currentUser: currentUser,
  //   startTime: new Date().getTime()
  // }
  // options.userbeHaviObj = userbeHaviObj

  if (currentUser) {
    if (options.headers) {
      if (url.indexOf('SynchroSERVERPART') > -1) {
        options.headers = {
          ...options.headers,
          PROVINCE_CODE: opt?.data?.PROVINCE_CODE,
          ProvinceCode: opt?.data?.PROVINCE_CODE,
          provincecode: opt?.data?.PROVINCE_CODE,
          token: currentUser.UserToken || '',
          ServerpartCodes: currentUser.CityAuthority || '',
          ServerpartShopIds: currentUser.ServerpartShopIds || '',
          UserPattern: currentUser?.UserPattern || '',

        }
      } else {
        options.headers = {
          ...options.headers,
          token: currentUser.UserToken || '',
          ProvinceCode: opt?.data?.noProvinceCode ? '' : (currentUser.ProvinceCode || ''),
          ServerpartCodes: currentUser.CityAuthority || '',
          ServerpartShopIds: currentUser.ServerpartShopIds || '',
          UserPattern: currentUser?.UserPattern || '',
        }
      }
    }


    if (url.indexOf('SynchroSERVERPART') > -1) {
      options.data = {
        ...options.data,
        STAFF_ID: currentUser.ID,
        STAFF_NAME: currentUser.Name,
        OPERATE_DATE: moment().format('YYYY-MM-DD HH:mm:ss'),
        PROVINCE_CODE: opt?.data?.PROVINCE_CODE,
      }
    } else {
      if ((url.indexOf('Synchro') > -1 || url.indexOf('Save') > -1) &&
        url.indexOf('Picture/SaveImgFile') === -1) {

        // 添加操作人和业主单位信息
        options.data = {
          ...options.data,
          STAFF_ID: currentUser.ID,
          STAFF_NAME: currentUser.Name,
          OWNERUNIT_ID: options.data.OWNERUNIT_ID || currentUser.OwnerUnitId,
          OWNERUNIT_NAME: options.data.OWNERUNIT_NAME || currentUser.ProvinceUnit,
          PROVINCE_CODE: (options.data.PROVINCE_CODE || currentUser.ProvinceCode),

          OPERATE_DATE: moment().format('YYYY-MM-DD HH:mm:ss')
        }
        if (currentUser?.UserPattern === 2000) {
          options.data = {
            ...options.data,
            PROVINCE_CODE: (options.data.PROVINCE_CODE || currentUser.ProvinceCode),
            BUSINESSMAN_ID: currentUser.BusinessManID,
            OPERATE_DATE: moment().format('YYYY-MM-DD HH:mm:ss')
          }
        }
      }
    }

    if (options && options.data && options.data.requestEncryption) {
      options.data = {
        name: "",
        value: encryptAES(JSON.stringify(options.data))
      }
    }
  }
  return {
    // url: url.indexOf('handler_ajax.ashx')>-1 ?`https://user.eshangtech.com${url}`: `http://47.96.233.105/EShangApiMain${url}`,
    url,// .indexOf('handler_ajax.ashx')>-1 ?`${url}`: `/EShangApiMain${url}`,
    options,
  }
})
request.interceptors.response.use((response, option) => {
  const nowTmp = moment()
  Cookies.set('tmp', nowTmp.format())

  // // 加个数组 如果请求地址是数组里面的 那就不调用 记录用户行为了
  // let specialList = ['/FrameWork/GetFieldEnumByField', "/FrameWork/GetUserModuleList", "/FrameWork/GetFieldEnumTree", '/Logging/GetPassportInfoByToken', '/Logging/UserLogin', 'Dictionary/GetFieEnumList', '/Platform/SynchroBehaviorrecord']
  // // 判断一下 现在的这次请求 是不是特殊 不需要进行记录的
  // let isOk: boolean = true

  // let userbeHaviObj = option?.userbeHaviObj || {}

  // specialList.forEach((item: any) => {
  //   if (userbeHaviObj.url.indexOf(item) !== -1) {
  //     isOk = false
  //   }
  // })

  // if (isOk) {
  //   let nowMenu = session.get("currentMenu")
  //   let endTime = new Date().getTime()
  //   let basicInfo = session.get("basicInfo")
  //   let systemBasin = session.get("systemBasin")
  //   let browserVersion = session.get("browserVersion")

  //   const req: any = {
  //     USER_ID: userbeHaviObj.currentUser.ID,
  //     USER_NAME: userbeHaviObj.currentUser.Name,
  //     BEHAVIORRECORD_TYPE: "2000", // 1000 浏览页面 2000 行为记录 
  //     BEHAVIORRECORD_EXPLAIN: `在页面${nowMenu.name}调用接口${userbeHaviObj.url.split('https://api.eshangtech.com')[1]}`,
  //     BEHAVIORRECORD_TIME: moment(new Date(userbeHaviObj.startTime)).format('YYYY-MM-DD HH:mm:ss'),
  //     BEHAVIORRECORD_ROUT: nowMenu.pathname,
  //     BEHAVIORRECORD_ROUTNAME: nowMenu.name,
  //     BEHAVIORRECORD_LEAVETIME: moment(new Date(endTime)).format('YYYY-MM-DD HH:mm:ss'),
  //     BEHAVIORRECORD_DURATION: (endTime - userbeHaviObj.startTime) / 1000,
  //     OWNERUNIT_ID: userbeHaviObj.currentUser.OwnerUnitId,
  //     OWNERUNIT_NAME: userbeHaviObj.currentUser.OwnerUnitName,
  //     BUSINESSMAN_ID: userbeHaviObj.currentUser.BusinessManID,
  //     BUSINESSMAN_NAME: userbeHaviObj.currentUser.BusinessManName,
  //     SOURCE_PLATFORM: '驿商云平台',
  //     BEHAVIORRECORD_DESC: JSON.stringify(userbeHaviObj.options.params) === '{}' ? userbeHaviObj.url.split('?')[1] : JSON.stringify(userbeHaviObj.options.params), // 入参
  //     USER_LOGINIP: basicInfo.ip,
  //     USER_LOGINPLACE: `${basicInfo.country}${basicInfo.prov}${basicInfo.city}${basicInfo.district}`,
  //     BROWSER_VERSION: browserVersion,
  //     OPERATING_SYSTEM: systemBasin
  //   }
  //   console.log('reqreqreqreqreq', req);
  //   // fetch('https://api.eshangtech.com/EShangApiMain/Platform/SynchroBEHAVIORRECORD', {
  //   //   method: 'POST',
  //   //   headers: {
  //   //     'Content-Type': 'application/json',
  //   //   },
  //   //   body: JSON.stringify(req),
  //   // })
  // }
  return response
})
export default request;
