package net.northking.cctp.saas.constants;

import net.northking.cctp.common.exception.PlatformError;

/**
 * 平台可能发生的错误
 *
 * @author xiusong.xie
 * @since 2.4
 */
public enum SaaSAppError implements PlatformError
{
  FIRST(220000, "First"),
  MICRO_SERVICE_NOT_EXIST("SaaS微服务(id={0})不存在"),
  DATA_SOURCE_CLUSTER_NOT_EXIST("SaaS数据源集群(id={0})不存在"),
  APP_DATA_SOURCE_NOT_EXIST("App与数据源集群的关系(id={0})不存在"),
  App_Resource_NOT_EXIST("微服务Api接口(id={0})不存在"),
  Tenant_Software_NOT_EXIST("租户的软件配置不存在"),
  Software_NOT_EXIST("SaaS软件(id={0})不存在"),
  Software_Func_NOT_EXIST("软件功能(id={0})不存在"),
  Publish_MicroService_Resource_Err("发布微服务API资源发生异常"),
  Publish_Tenant_Software_Err("发布租户软件发生异常"),
  Publish_Tenant_Id_Err("发布软件过期的租户发生异常"),
  Publish_Tenant_Admin_Err("创建租户管理员账号异常"),
  PUBLISH_APP_RESOURCE_ERR("发布软件关系异常"),
  Publish_Tenant_Menu_Dir_Err("发送更改租户目录菜单异常"),

  // -------------- 租户
  DUPLICATED_SAAS_CODE("租户代码重复，请修改"),
  DUPLICATED_SAAS_NAME("租户名称重复，请修改"),
  DUPLICATED_SAAS_ADMIN_LOGIN_NO("租户管理员账号【{0}】重复，请修改"),
  TENANT_ADMIN_MUST_EXIST_ONE("必须存在一个租户管理员"),
  TENANT_IS_EXPIRED("该租户已过期，请先更改租户到期日期"),
  TENANT_DEPLOY_SOFTWARE_LIST("部署{0}个软件，失败{1}个，失败原因为:{2}已过期"),

  TENANT_ID_IS_NEEDED("租户主键不能为空"),
  TENANT_STATUS_IS_NEEDED("租户状态不能为空"),
  TENANT_SOFTWARE_EXIST("该租户存在软件关联"),

  TENANT_FORMAT_ERROR("租户名不能存在中文字符"),
  CODE_FORMAT_ERROR("租户代码不能存在大小写字母、数字和下划线以外的格式"),
  ADMIN_LOGIN_NO_ERROR("租户管理员账号只能存在大小写字母、数字、下划线(_)、猴头符号(@)、点(.)且不能以特殊符号开头"),

  // 租户选软件
  END_MUST_GREATER_THAN_START("失效时间必须大于当前时间"),
  ENABLE_SOFTWARE_FAILED("启用软件失败：软件期限已过期"),
  TENANT_SOFTWARE_IS_EXPIRE("当前软件已过期，部署失败"),
  SOFTWARE_ID_IS_NULL("传入参数的software_id不能为空"),

  //公告
  ANNOUNCEMENT_TIME_ERROR("失效时间不能小于起始时间"),
  ANNOUNCEMENT_UPDATE_FAILED("当前状态的公告不允许更新"),
  ANNOUNCEMENT_DELETE_FAILED("当前状态的公告不允许删除"),
  ANNOUNCEMENT_EXIST("发布失败，当前存在已发布的公告"),
  ANNOUNCEMENT_STATUS("当前状态不允许修改为未发布"),

  // 菜单
  MENU_LEVEL_IS_EXCEED("菜单层级超过【{0}】层"),
  MENU_NAME_IS_EMPTY("菜单名称为空"),
  MENU_NAME_LENGTH_IS_TOO_LONG("菜单名称：【{0}】，超过{1}个字符"),

  //日志
  NOTICE_INSERT("创建日志通知失败"),

  //软件
  SOFTWARE_CODE_EXIST("{0}已存在，请修改软件代号！"),
  SOFTWARE_NAME_EXIST("{0}已存在，请修改软件名称！"),
  COPIED_SOFTWARE_IS_NOT_EXIST("被复制的软软件不存在！"),
  COPY_SOFTWARE_FAIL("复制软件失败，缺少参数"),

  WORKING_IN_PROCESS("数据处理异常，请重新保存！"),

  LAST(229999, "Last");
  private static final int START_CODE = 220000;

  private final Integer code;
  private final String msg;

  SaaSAppError(Integer code, String msg)
  {
    this.code = code;
    this.msg = msg;
  }

  SaaSAppError(String msg)
  {
    this.code = ordinal() + START_CODE;
    this.msg = msg;
  }

  @Override
  public Integer getCode()
  {
    return code;
  }

  @Override
  public String getMsg()
  {
    return msg;
  }
}
