package net.northking.cctp.project.constants;

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

/**
 * 平台可能发生的错误
 *
 * @author xiusong.xie
 * @since 2.4
 */
public enum ProjectAppError implements PlatformError {
    FIRST(220000, "First"),
    ACCOUNT_NOT_EXIST("账户不存在"),
    PASSWORD_ERROR("密码错误"),
    ACCOUNT_DISABLE("账户已被禁用"),
    PASSWORD_ERR_LOCK("密码错误次数过多，账户已被锁定"),
    VERIFY_CODE_ERROR("验证码错误"),
    TIME_ERR("时间转换异常"),

    //系统
    PROJECT_NAME_ALREADY_EXISTS("系统名称已存在"),
    PROJECT_START_TIME_ABSTRACT("子系统开始时间应在父系统开始时间之后"),
    PROJECT_PRODUCTION_TIME_ABSTRACT("子系统计划上线时间应在父系统计划上线时间之前"),
    PROJECT_HAS_DATA_DELETE("该系统下已产生数据信息，不允许删除"),
    PROJECT_HAS_CHILDREN_DELETE("该系统下存在子系统，不允许删除"),
    PARENT_PROJECT_HAS_DATA_ADD("当前父系统下已产生数据信息，不允许新建子系统"),
    PROJECT_LAYERS_NO_DATA("当前新增系统超出所配置的系统层级，不允许新建子系统"),
    ID_IS_MISSING("缺少系统主键信息"),
    PROJECT_IS_NOT_EXIST("所查询系统不存在或者已被删除"),
    USER_IS_NOT_IN_PROJECT("不属于当前系统"),

    //需求规划
    DEMAND_PLAN_NUM_ALREADY_EXISTS("该需求编号已存在，请修改"),
    DEMAND_STATUS_ERROR("删除失败，当前状态不处于初始状态"),
    DEMAND_STATUS_NOT_EXISTS("需求状态不能为空"),

    //团队
    TEAM_NAME_ALREADY_EXISTS("团队名称已存在"),
    MUST_USER_ROLE("新增人员必须配置角色"),

    //系统人员，团队
    EXISTS_SAME_GROUP_NAME("已经存在相同的分组名称"),
    PROP_NAME_EXISTS("属性配置名称不能重复"),
    PROP_CANNOT_EXCEED_TEN("自定义属性不能超过20个"),

    //用户与系统
    USER_PROJECT_IS_EXISTS("用户与系统存在关联。"),

    //风险
    PROJECT_RISK_ADD_FAILD("系统风险添加失败"),
    PROJECT_RISK_DELETE_FAILD("系统风险删除失败"),
    PROJECT_RISK_SELECT_FAILD("系统风险查询失败"),
    PROJECT_RISK_INNER_SELECT_FAILD("系统风险内部查询失败"),

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

    NOTICE_INSERT("创建通知失败"),
    NOTICE_LOG_INSERT("创建日志通知失败"),
    HIGH_RISK_SEND("高危日志记录失败，无法删除"),

    //  测试报告
    CREATED_REPORT_FAILED("测试报告生成失败"),
    QUERY_REPORT_FAILED("查询测试报告失败"),

    //环境
    ENV_BY_PROJECT("新增环境关联失败"),
    ENV_USE_FOR_PLAN("所修改的系统环境被计划所引用，请检查"),
    ENV_CHECK_ERROR("校验环境是否被使用异常{0}"),
    // 软件
    PROJECT_ID_IS_EMPTY("缺少查询字段系统ID：projectId"),

    PROJECT_CASE_DELETE("删除系统与环境关联队列异常"),

    PROJECT_ENV_DS_IS_EXISTS("该系统环境已存在相同名称数据源，请修改"),
    PROJECT_ENV_DS_IS_NULL("数据源信息不存在"),
    DS_CONNECTION_FAIL("数据库连接失败,请检查连接信息是否正确"),
    DS_DRIVER_IS_NULL("数据库驱动不存在，请联系管理员"),
    DS_URL_TEMP_IS_NULL("数据库URL模板不存在，请联系管理员"),
    CACHE_DS_DRIVER_IS_NULL("字典缓存中不存在数据库驱动信息，请联系管理员"),
    CACHE_DS_URL_TEMP_IS_NULL("字典缓存中不存在数据库URL模板信息，请联系管理员"),
    DB_CONN_FAIL("数据库连接失败"),
    DB_EXECUTE_SQL_FAIL("数据库执行SQL失败：{0}"),
    DB_SQL_ANALYSIS_FAIL("MonogoDB Doucement 解析失败：{0}"),
    DS_CONNECTION_PARAMS_IS_NULL("数据源必填连接参数为空，请检查"),
    DS_CONFIG_SOURCE_EXCEPTION("数据源配置来源异常：{0}"),

    PROJECT_ENV_SYS_IS_EXISTS("该系统环境已存在相同名称被测系统，请修改"),
    PROJECT_ENV_SYS_IS_NULL("被测系统信息不存在"),
    PROJECT_ENV_SYS_URL_IS_NULL("被测系统访问地址不存在"),

    GENERAL_ENUM("{0}"),

    LAST(229999, "Last"),

    GET_ATS_PROJECT_FROM_HZBANK_FAIL("获取ats系统失败"),

    PROJECT_NAME_IS_EMPTY("系统名称为空"),

    PROJECT_STATUS_IS_EMPTY("系统状态为空"),

    PROJECT_MANAGER_IS_EMPTY("系统责任人为空"),

    GET_PROJECT_MEMBER_FAIL("获取系统成员失败"),
    PARSE_DATE_ERROR("日期格式化失败"),

    SNOW_WOLF_ID_IS_EMPTY("雪狼项目id为空"),
    SNOW_WOLF_NO_IS_EMPTY("雪狼项目编码为空"),
    SNOW_WOLF_NAME_IS_EMPTY("雪狼项目名称为空"),
    GET_SNOW_WOLF_FROM_HZBANK_FAIL("雪狼项目信息获取失败"),

    PROJECT_ENV_SYS_SAVE_ERROR("保存被测试系统失败"),

    ENV_LIST_IS_EMPTY("保存系统环境信息失败，环境信息为空"),

    PROJECT_SOFTWARE_FAIL("获取系统软件失败"),
    ;

    private static final int START_CODE = 220000;

    private final Integer code;
    private final String msg;

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

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

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

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