import { notification, message as amessage } from 'antd';
import isUndefined from 'lodash/isUndefined';

// 1. 业务重定向
const bizRedirectHandler = response => {
  const { code, data } = response;
  if (Number(code) === 302 && data && data.redirectUrl) {
    window.location.assign(data.redirectUrl);
  }
};

// 2. 开发级错误信息转换
const bizDevErrorAdapter = response => {
  const { code, success, message, description } = response;
  const opCode = Number(code);
  if (success === false && opCode >= 300 && opCode !== 302) {
    return {
      message: message || `${code}`,
      description: description || message,
    };
  }
  return null;
};

// 3. 用户级错误信息转换
const bizErrorMessageAdapter = response => {
  const { code, success, message } = response;
  const opCode = Number(code);
  if (success === false && (opCode < 300 || opCode === 302)) {
    return message;
  }
  return null;
};

// 4. 成功信息转换
const bizSuccessMessageAdapter = (response, successMessage) => {
  const { success, message } = response;
  if (successMessage === false) {
    return null;
  }
  if (success !== false) {
    if (successMessage === true) {
      return message;
    }
    return successMessage;
  }
  return null;
};

// 5. 消息通知
const bizNotifyHandler = notifyMessages => {
  const { successMessage, errorMessage, errorDesc } = notifyMessages;
  if (successMessage) {
    amessage.success(successMessage);
  } else if (errorMessage) {
    amessage.error(errorMessage);
  } else if (errorDesc) {
    notification.error({
      message: errorDesc.message,
      description: errorDesc.description,
    });
  }
};

// 6. 业务数据转换
const bizDataAdapter = response => {
  if (response && !isUndefined(response.data)) {
    return response.data;
  }
  return response;
};

export default {
  bizDataAdapter,
  bizDevErrorAdapter,
  bizErrorMessageAdapter,
  bizSuccessMessageAdapter,
  bizNotifyHandler,
  bizRedirectHandler,
};