package net.northking.cctp.device.constants;

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

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

    //移动设备品牌管理
    BRAND_NAME_TOO_LONG("品牌名称长度不能大于32！"),
    BRAND_NAME_NULL("品牌名称不能为空！"),
    BRAND_CHN_NAME_TOO_LONG("品牌中文名称长度不能大于32！"),
    BRAND_CHN_NAME_NULL("品牌中文名称不能为空！"),
    BRAND_NAME_EXIST("{0}品牌英文名称已存在，请修改品牌英文名称！"),
    FILE_TYPE_ERROR("品牌图片类型不符合，请重新上传！"),
    BRAND_SIZE_LIMIT_EXCEEDED("品牌图片超过大小限制（500KB)"),
    GET_FILE_STREAM_ERROR("获取文件流失败!"),
    BRAND_NAME_CN_ERROR("{0}存在非中文字符，请修改！"),
    BRAND_NAME_ERROR("{0}存在非英文字符，请修改！"),
    BRAND_IS_EXIST("{0}品牌已存在。请修改！"),
    BRAND_MODEL_EXIST("当前品牌与机型存在关联，删除失败！"),

    MODEL_IS_EXIST("{0}设备型号已存在，请修改！"),
    MODEL_DEVICE_EXIST("当前设备型号存在关联，删除失败！"),
    DEVICE_IP_ADDR_EXIST("当前设备的IP已存在"),

    //
    REMOTE_FAIL("远程失败，设备不可用！"),
    DEVICE_IS_PRIVATE_BY_PRO("设备【{0}】已被分配到系统"),
    DEVICE_IS_PRIVATE_BY_TENANT("设备【{0}】已被分配到租户"),
    DEVICE_IS_PRIVATE("当前设备已被分配，请选择其他设备"),
    DEVICE_NOT_ONLINE("设备不处于在线状态！"),
    DEVICE_IS_USE("当前设备已被使用，请选择其他空闲设备！"),
    DEVICE_TIME_ERROR("到期时间不能在当前时间之前"),
    PROJECT_TIME_BEFROE_TENALATE_TIME_ERROR("到期时间不能大于租户到期时间"),
    DEVICE_EXIT_ERROR("设备已被其他用户占用！"),
    EXPIRE_TIME_ERROR("当前到期时间已失效，保存失败！"),
    DEVICE_ENGINE_IS_USE("当前设备被其他引擎占用，请选择其他空闲设备"),
    PRO_TIME_AFTER_TENANT_TIME("设备【{0}】的系统到期时间大于在租户到期时间【{1}】，分配失败！"),
    DEVICE_TOKEN_ERROR("当前token不合法！"),
    DEVICE_CTRL_UP_LIMIT("当前上位机接入数已达最大值！"),
    DEVICE_CTRL_IS_NOT_EXIST("上位机不存在，请重新注册！"),
    DELETE_DEVICE_ERROR("不能删除处于在线和连接中的设备！"),
    DEVICE_HAS_RECYCLE("设备已被回收"),
    DEVICE_IS_DELETE("设备已移除"),
    DEVICE_NOT_ONLINE_FREE("设备不处于在线空闲状态，重启失败"),
    DEVICE_RESTART_ERROR("{0}台设备重启中，{1}台设备重启失败"),
    ACHIEVE_DEVICE_ERROR("申请设备异常，部分设备被占用或不存在！"),

    ENGINE_VERSION_NOT_EXIST("版本不存在"),
    UPDATE_HEART_ERROR("更新设备心跳异常"),
    EMAIL_ERROR("发送邮件异常"),
    ENGINE_IS_NULL("当前无可用的引擎"),

    PROMETHEUS_RESULT_ERROR("查询响应状态错误:{0}"),
    DATA_ERROR("数据异常，资源监控请求失败"),
    NO_EXIST_HOST("此机器不在当前数据源监控列表之中"),
    MONITOR_TARGET_NO_RUNNING("监控对象未启动，无法获取"),

    GENERAL_ENUM("{0}"),

    LAST(229999, "Last");

    private static final int START_CODE = 220000;

    private final Integer code;
    private final String msg;

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

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

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

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