package com.xinelu.common.enums;

import lombok.Getter;

/**
 * 短信发送失败错误码枚举
 */
@Getter
public enum SmsErrorCodeEnum {

    /**
     * RAM权限不足
     */
    RAM_PERMISSION_DENY("isp.RAM_PERMISSION_DENY", "RAM权限不足"),

    /**
     * 业务停机
     */
    OUT_OF_SERVICE("isv.OUT_OF_SERVICE", "业务停机"),

    /**
     * 未开通云通信产品的阿里云客户
     */
    PRODUCT_UN_SUBSCRIPT("isv.PRODUCT_UN_SUBSCRIPT", "未开通云通信产品的阿里云客户"),

    /**
     * 产品未开通
     */
    PRODUCT_UNSUBSCRIBE("isv.PRODUCT_UNSUBSCRIBE", "产品未开通"),

    /**
     * 账户不存在
     */
    ACCOUNT_NOT_EXISTS("isv.ACCOUNT_NOT_EXISTS", "账户不存在"),

    /**
     * 账户异常
     */
    ACCOUNT_ABNORMAL("isv.ACCOUNT_ABNORMAL", "账户异常"),

    /**
     * 该账号下找不到对应模板
     */
    SMS_TEMPLATE_ILLEGAL("isv.SMS_TEMPLATE_ILLEGAL", "该账号下找不到对应模板"),

    /**
     * 测试模板和签名限制
     */
    SMS_TEST_SIGN_TEMPLATE_LIMIT("isv.SMS_TEST_SIGN_TEMPLATE_LIMIT", "测试模板和签名限制"),

    /**
     * 签名和模板类型不一致
     */
    SMS_SIGNATURE_SCENE_ILLEGAL("isv.SMS_SIGNATURE_SCENE_ILLEGAL", "签名和模板类型不一致"),

    /**
     * 签名禁止使用
     */
    SMS_SIGN_ILLEGAL("isv.SMS_SIGN_ILLEGAL", "签名禁止使用"),

    /**
     * 该账号下找不到对应签名
     */
    SMS_SIGNATURE_ILLEGAL("isv.SMS_SIGNATURE_ILLEGAL", "该账号下找不到对应签名"),

    /**
     * 系统出现错误，请重新调用
     */
    SYSTEM_ERROR("isp.SYSTEM_ERROR", "系统出现错误，请重新调用"),

    /**
     * 手机号码格式错误
     */
    MOBILE_NUMBER_ILLEGAL("isv.MOBILE_NUMBER_ILLEGAL", "手机号码格式错误"),

    /**
     * 手机号码数量超过限制，最多支持1000条
     */
    MOBILE_COUNT_OVER_LIMIT("isv.MOBILE_COUNT_OVER_LIMIT", "手机号码数量超过限制，最多支持1000条"),

    /**
     * 模板变量中存在未赋值变量
     */
    TEMPLATE_MISSING_PARAMETERS("isv.TEMPLATE_MISSING_PARAMETERS", "模板变量中存在未赋值变量"),

    /**
     * 传入的变量内容和实际申请模板时变量所选择的属性类型不配
     */
    TEMPLATE_PARAMS_ILLEGAL("isv.TEMPLATE_PARAMS_ILLEGAL", "传入的变量内容和实际申请模板时变量所选择的属性类型不配"),

    /**
     * 超过单自然日模板申请数量上限
     */
    TEMPLATE_COUNT_OVER_LIMIT("isv.TEMPLATE_COUNT_OVER_LIMIT", "超过单自然日模板申请数量上限"),

    /**
     * 模板字符数量超过限制
     */
    TEMPLATE_OVER_LIMIT("isv.TEMPLATE_OVER_LIMIT", "模板字符数量超过限制"),

    /**
     * 触发云通信流控限制
     */
    BUSINESS_LIMIT_CONTROL("isv.BUSINESS_LIMIT_CONTROL", "触发云通信流控限制"),

    /**
     * 参数格式错误，请修改为字符串值
     */
    INVALID_JSON_PARAM("isv.INVALID_JSON_PARAM", "参数格式错误，请修改为字符串值"),

    /**
     * 参数格式不正确
     */
    INVALID_PARAMETERS("isv.INVALID_PARAMETERS", "参数格式不正确"),

    /**
     * 变量中传入疑似违规信息
     */
    BLACK_KEY_CONTROL_LIMIT("isv.BLACK_KEY_CONTROL_LIMIT", "变量中传入疑似违规信息"),

    /**
     * 参数超过长度限制
     */
    PARAM_LENGTH_LIMIT("isv.PARAM_LENGTH_LIMIT", "参数超过长度限制"),

    /**
     * 变量不支持传入URL
     */
    PARAM_NOT_SUPPORT_URL("isv.PARAM_NOT_SUPPORT_URL", "变量不支持传入URL"),

    /**
     * 账户余额不足
     */
    AMOUNT_NOT_ENOUGH("isv.AMOUNT_NOT_ENOUGH", "账户余额不足"),

    /**
     * 关键字拦截
     */
    FILTER("FILTER", "关键字拦截"),

    /**
     * 重复过滤
     */
    VALVE_MC("VALVE:M_MC", "重复过滤"),

    /**
     * 单个号码日或月发送上限，流控超限，频繁发送超限
     */
    MOBILE_SEND_LIMIT("MOBILE_SEND_LIMIT", "单个号码日或月发送上限，流控超限，频繁发送超限"),

    /**
     * 手机号在黑名单（平台或运营商）
     */
    MOBILE_IN_BLACK("MOBILE_IN_BLACK", "手机号在黑名单（平台或运营商）"),

    /**
     * 手机终端问题、内存满、SIM卡满、非法设备等
     */
    MOBILE_TERMINAL_ERROR("MOBILE_TERMINAL_ERROR", "手机终端问题、内存满、SIM卡满、非法设备等"),

    /**
     * 未开通国际短信
     */
    SP_NOT_BY_INTER_SMS("SP_NOT_BY_INTER_SMS", "未开通国际短信"),

    /**
     * 用户手机退订此业务、产品未开通
     */
    USER_REJECT("USER_REJECT", "用户手机退订此业务、产品未开通"),

    /**
     * 运营商未知错误
     */
    SP_UNKNOWN_ERROR("SP_UNKNOWN_ERROR", "运营商未知错误"),

    /**
     * 用户账户异常、携号转网、欠费等
     */
    MOBILE_ACCOUNT_ABNORMAL("MOBILE_ACCOUNT_ABNORMAL", "用户账户异常、携号转网、欠费等"),

    /**
     * 消息发送成功
     */
    DELIVERED("DELIVERED", "消息发送成功"),

    /**
     * 内容关键字拦截
     */
    CONTENT_KEYWORD("CONTENT_KEYWORD", "内容关键字拦截"),

    /**
     * 签名黑名单
     */
    SIGNATURE_BLACKLIST("SIGNATURE_BLACKLIST", "签名黑名单"),

    /**
     * 号码不合法
     */
    INVALID_NUMBER("INVALID_NUMBER", "号码不合法"),

    /**
     * 无路由器
     */
    NO_ROUTE("NO_ROUTE", "无路由器"),

    /**
     * 模板内容无退订
     */
    CONTENT_ERROR("CONTENT_ERROR", "模板内容无退订"),

    /**
     * 未知错误
     */
    UNKNOWN_ERROR("UNKNOWN_ERROR", "未知错误");

    private final String code;
    private final String message;

    SmsErrorCodeEnum(String code, String message) {
        this.code = code;
        this.message = message;
    }

    public String getMessage() {
        return message;
    }

    public static SmsErrorCodeEnum getMsgByCode(String code) {
        for (SmsErrorCodeEnum errorCode : SmsErrorCodeEnum.values()) {
            if (errorCode.code.equals(code)) {
                return errorCode;
            }
        }
        return UNKNOWN_ERROR;
    }
}
