package net.northking.cctp.platform.constants;

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

/**
 * 平台可能发生的错误
 * @author xiusong.xie
 * @since 2.4
 */
public enum PlatformAppError implements PlatformError
{
  FIRST(220000, "First"),
  LOGIN_ERROR("禁止登录"),
  ACCOUNT_NOT_EXIST("登录失败，用户不存在或已失效"),
  TOKEN_ERROR("登录失败，当前token已失效!"),
  PASSWORD_ERROR("用户名或密码错误，请重新输入"),
  PWD_DECRYPT_FAILED("算法解析失败！"),
  ACCOUNT_DISABLE("账户已被禁用,请联系相关负责人！"),
  PASSWORD_ERR_LOCK("账号已被锁定,请联系相关负责人！"),
  VERIFY_CODE_ERROR("验证码错误"),
  IMPORT_USERS_FAILUER("导入用户失败：{0}"),
  IMPORT_IS_NULL("当前导入用户模板数据为空，请填写数据后再进行导入"),
  EXPORT_TEMPLATE_FAILUER("模板下载失败"),
  ORIGINAL_PASSWORD_ERROR("原密码错误，请重新输入"),
  NEWPWD_EQUALS_OLDPWD("新密码与原密码一致，请重新输入"),
  NEWPWD_HAS_ERR("新密码不允许输入空格"),
  USERNAME_NOT_NULL("账号不能为空"),
  PASSWORD_NOT_NULL("密码不能为空"),
  PASSWORD_LENGTH_ERROR("密码长度不能小于8位且不能大于30位"),
  PASSWORD_SIZE_ERROR("密码不符合密码复杂度要求(至少由大写字母、小写字母、数字和特殊字符中的三种或以上字符组成)"),
  PASSWORD_EQUAL_LOGIN_NO("密码不允许与用户登录名设置为相同的字符串"),
  USER_HAS_DELETED("账户已被删除"),
  LOGIN_IS_LACK_OF_TIME("请求缺少必要的参数"),
  USER_LOGIN_ERROR("当前用户未登录！"),

  // 用户
  LOGIN_NO_IS_EXIST("平台已存在【{0}】登录名，请修改登录名"),
  LOGIN_NO_ERROR("登录号格式错误，只能存在大小写字母、数字、下划线(_)、猴头符号(@)、点(.)且不能以特殊符号开头！"),
  USER_HAS_PROJECT_DELETE("用户与项目存在关联，不能删除"),
  USER_HAS_NOTICE_DELETE("用户存在着未处理的待办，不能删除"),
  USER_HAS_PROJECT_ENABLE("用户与项目存在关联，不能禁用"),
  USER_HAS_NOTICE_ENABLE("用户存在着未处理的待办，不能禁用"),
  IMPORT_USERS_EXCEED("导入用户数量单次不能超过500个"),
  LOGIN_NO_HAS_EXIST("【{0}】租户管理员账号已存在，请修改租户管理员账号"),
  LOGIN_NO_HAS_SAME("导入失败，用户【{0}】登录名重复"),
  LOGIN_NO_SHORT("导入失败，用户【{0}】登录名小于6位"),
  USER_IS_NOT_EXIST("用户不存在"),
  ID_NO_DO_NOT_MATCHER("身份证号码不符合格式"),
  ID_NO_IS_EMPTY("身份证号码为空"),
  FIELD_IS_EMPTY("{0} 不能为空"),
  FIELD_IS_OUT_OF_BOUND("{0} 超出字数长度范围"),
  GET_USER_FROM_HZBANK_FAIL("从杭银平台获取用户失败"),
  USER_NAME_IS_EMPTY("用户名为空"),
  USER_ID_IS_EMPTY("用户ID为空"),
  EMPLOYEE_NAME_IS_EMPTY("用户姓名为空"),

  // 租户
  TENANT_IS_NOT_FOUND("所在租户信息不存在"),
  TENANT_ID_IS_NULL("租户编号不能为空"),
  TENANT_ACQUIRED_FAILED("租户信息获取失败"),
  TENANT_IS_DISABLED("该租户已被禁用或者已到期，无法登录"),
  TENANT_IS_DELETED("租户已被删除"),
  TENANT_ADMIN_IS_EXIST("租户管理员已存在，创建失败"),
  TENANT_ADMIN_MUST_EXIST_ONE("该用户【{0}】属于最后一个租户管理员，不可删除"),
  MQ_MESSAGE_TRANSFER_ERR("租户菜单目录信息转换异常"),

  //项目模板
  MANAGE_TEMPLATE_NAME_ALREADY_EXISTS("项目管理模板名称已存在，请更改"),
  MANAGE_TEMPLATE_HAS_PROJECT_UPDATE("模板已被项目引用，不允许修改"),
  MANAGE_TEMPLATE_HAS_PROJECT_DELETE("模板已被项目引用，不允许删除"),
  MANAGE_TEMPLATE_LAYER_TYPE_UPDATE("项目管理模板统计维度不可修改"),
  MANAGE_TEMPLATE_PROJECT_TYPE_RULE_UPDATE("项目管理模板与项目类型绑定规则已被修改"),
  TEMPLATE_PROJECT_TYPE_RULE_UPDATE("模板或流程与项目类型绑定规则已被修改"),
  TYPE_DEFINITION_NOT_BLANK("类型定义不能为空"),
  TEMPLATE_NAME_ALREADY_EXISTS("模板名称已存在，请更改"),
  PROPERTY_ORDER_UPDATE_FAULURE("属性顺序更新失败"),
  TEMPLATE_ADD_FAULURE("新增模板失败"),
  TEMPLATE_HAS_PROJECT("模板已与项目关联,不允许删除"),
  TEMPLATE_SIZE_ERROR("自定义属性数量不能大于20"),
  TEMPLATE_ADD_DEFAULT_ERR("创建默认模板失败"),
  SET_DEFAULT_SYSTEM("设置默认失败"),

  // 组织机构
  ORG_NAME_IS_DUPLICATED("组织名称在同一级下已存在相同名称"),
  ORG_HAS_SUB_ORG("该机构目录下挂有子机构，请先删除子机构信息"),
  ORG_HAS_USER("该机构目录挂有用户信息，请先删除用户信息"),
  ADD_ORG_MANAGER_FAILURE("添加机构负责人失败"),
  ORG_IS_NOT_EXIST("机构不存在，请选择正确机构"),
  ORG_MANAGER_PROPERTY_IS_EMPTY("负责人信息存在空白，请填写完整信息"),
  ORG_DELETED_FAILED("机构删除失败"),
  ORG_NAME_IS_OUT_OF_RANGE("机构名称字数不在范围"),
  ORG_NAME_IS_EMPTY("机构名称不能为空"),

  //字典
  DICT_CATALOG_NAME_ALREADY_EXISTS("字典类型名称已存在"),
  DICT_CATALOG_CODE_ALREADY_EXISTS("字典类型编码已存在"),
  DICT_ITEM_NAME_ALREADY_EXISTS("字典条目名称已存在"),
  DICT_ITEM_CODE_ALREADY_EXISTS("字典条目值已存在"),
  DICT_CATALOG_IS_DISABLE("字典条目已被禁用：{0}"),
  DICT_CATALOG_CODE_ERROR("字典编码错误：{0}"),
  DICT_SYS_EXCEL_FILE_EMPTY("文件内容为空"),
  DICT_CATALOG_CODE_IS_EMPTY("字典条目为空"),

  DICT_CODE_TOO_LONG("字典类型编码长度不能超过30！"),
  DICT_CODE_IS_NULL("字典类型编码不能为空！"),
  DICT_NAME_TOO_LONG("字典类型名称长度不能超过30！"),
  DICT_NAME_IS_NULL("字典类型名称不能为空！"),



  // 角色
  ROLE_IS_SYSTEM_DEFAULT("当前角色为系统默认角色不能被删除"),
  ROLE_IS_RELATED_TO_USER("角色已关联用户，不可删除"),
  ROLE_CODE_IS_EXIST("已存在角色代码，请修改"),
  ROLE_NAME_IS_EXIST("已存在角色名称，请修改"),
  INITIAL_ROLE_EXCEPTION("初始化角色失败"),
  NO_ROLE_INIT_DATA("缺少角色关联初始化数据"),
  DELETE_ROLE_RESOURCE_FAILED("删除角色-功能失败"),
  PROJECT_HAS_ROLE_DATA("该角色在项目成员中存在关联，不能删除"),
  RULE_HAS_ROLE_DATA("该角色在项目级规则中存在关联，不能删除"),
  PROP_IS_EMPTY("必填参数不能为空"),
  LENGTH_IS_VALID("{0}字数长度超出范围"),

  // 用户-角色
  USER_OR_ROLE_NOT_SELECTED("请选择用户和角色"),
  USER_ROLE_CONFIG_FAILED("用户关联角色失败"),
  ROLE_HAS_USER("角色下存在用户，不能删除"),

  // 知识库树
  TREE_NAME_IS_DUPLICATED("该目录名已存在"),
  TREE_HAS_SUB_DEMO("该叶子节点下存在条目"),
  TREE_HAS_NODE_NAME("该节点下存在同名节点"),
  TREE_BY_TENANT_IS_USER("当前树目录正在处理中，请重试！"),
  LOCKER_ACQUIRED_FAILED("拖拽失败，请重试"),

  // 知识库
  INFO_NAME_IS_DUPLICATED("该条目名称已存在"),
  LEVEL_NO_TOO_LONG("知识库树层级不能超过10级"),

  //  用户是否存在未处理的待办
  USER_NOTICE_IS_EXIST("用户存在未处理的待办"),

  //规则库
  RULE_COLLECTION_NAME_ALREADY_EXISTS("规则集合名称已存在"),
  RULE_NO_NOT_EXISTS("规则编号不存在"),
  RULE_NO_TOO_LONG("规则编号不能大于32位"),
  LABEL_HAS_SAME("该标签类型下已存在标签名称:【{0}】，请修改"),

  //用户导航菜单
  PROJECT_NOT_SOFTWARE("该项目下用户不存在角色"),

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

  WORKING_IN_PROCESS("正在处理中"),

  // 初始化
  ROLE_IS_MISSING("角色【{0}】缺陷，请检查是否已经初始化系统角色"),
  STATUS_IS_MISSING("租户缺少缺陷状态字典"),
  NO_BUG_PROCESS_INIT_DATA("缺少缺陷流程初始化数据"),
  PROCESS_SEND_FAIL("流程初始化数据发送失败"),
  ROLE_NOT_EXIST("创建失败，请检查是否已经初始化系统角色"),
  RULE_COLLECTION_ADD_DEFAULT_ERR("创建默认规则失败"),

  // 环境管理
  ENV_NAME_ERROR("该环境名称已存在，请修改！"),
  ENV_IS_DEFAULT("该环境为默认环境，不能删除！"),
  ENV_SET_DEFAULT("设置默认环境发生异常，请重试！"),
  ENV_BY_PROJECT("发送队列异常！"),
  ENV_PROJECT_EXIST("当前环境存在关联项目，不能删除！"),

  // 组件库
  COMPONENT_LIBRARY_FILE_ERROR("文件扫描异常，请确认组件库文件"),
  COMPONENT_FILE_SERVICE_DOWN("文件上传至文件服务器失败，请确认文件服务是否可用"),
  COMPONENT_LIBRARY_SCAN_ERROR("未扫描到可使用组件，请更换有效组件库文件"),
  COMPONENT_LIBRARY_VERSION_LOW("上传版本过低或与当前版本相同，请确认组件库文件"),
  COMPONENT_LIBRARY_SAVE_ERROR("组件保存失败，请联系管理员"),
  COMPONENT_LIBRARY_FILE_LOST("组件库文件流丢失，请重新上传扫描"),
  COMPONENT_LIBRARY_NOT_EXIT("组件库记录不存在，请刷新重试"),

  //文件
  FILE_SIZE_ERROR("文件大小不能超过{0}M"),
  // 登录
  ONLINE_USER_IS_FULL("目前已经存在最大用户数登录，无法登录"),

  //license相关
  LICENSE_EXPIRE("您的licence已经过期，请联系管理员重新导入，谢谢！"),
  LICENSE_TIME_WRONG("您的系统时间不对，请您设置正确的时间，谢谢！"),

  //Exception
  HAS_EXCEPTION("系统异常，请联系管理员"),
  UUID_IS_NULL("传入参数不能为空"),
  LAST(229999, "Last"),

  GET_ORG_FROM_HZBANK_FAIL("从杭银平台获取组织机构信息失败"),
  GET_DICT_FROM_HZBANK_FAIL("从monster获取字典项失败");
  private static final int START_CODE = 220000;

  private final Integer code;
  private final String msg;

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

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

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

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