package xtools.boot.api.enums;

import xtools.base.exception.BaseError;
import xtools.base.exception.BaseErrorModule;

/**
 * <p>Title : BootError</p>
 * <p>Description : BootError</p>
 * <p>DevelopTools : Idea_x64_v2026.1</p>
 * <p>DevelopSystem : macOS Sequoia 15.7.5</p>
 * <p>Company : org.xujun</p>
 *
 * @author : XuJun
 * @version : 5.0.0
 * @date : 2025/12/23 16:53
 */
public enum BootError implements BaseError {

    /* api begin */
    // 认证异常
    UNAUTHORIZED_ERROR(401, "UNAUTHORIZED_ERROR", BootErrorModule.BOOT_API, "{}"),
    // 公钥错误
    BIZ_PUBLIC_KEY_ERROR(9990, "BIZ_PUBLIC_KEY_ERROR", BootErrorModule.BOOT_API, "{}"),
    // 业务警告
    BIZ_WARNING(9998, "BIZ_WARNING", BootErrorModule.BOOT_API, "{}"),
    // 业务异常
    BIZ_ERROR(9999, "BIZ_ERROR", BootErrorModule.BOOT_API, "{}"),
    // 结果码异常
    RESULT_CODE(10000, "RESULT_CODE", BootErrorModule.BOOT_API, "结果码异常,业务错误码必须大于1000,code:{}"),
    /* api end */

    /* core begin */
    // Spring 核心工具异常
    SPRING_BASE(10001, "SPRING_BASE", BootErrorModule.BOOT_CORE, "Spring基本工具异常,操作类型:[{}]"),
    // 时间转换异常
    TIME_CONVERT(10002, "TIME", BootErrorModule.BOOT_CORE, "时间转换异常,时间:{}"),
    /* core end */

    /* log begin */
    // 日志Holder异常
    LOG_HOLDER(10100, "LOG", BootErrorModule.BOOT_LOG, "日志 Holder 异常"),
    /* log end */

    /* mq begin */
    MQ(10200, "MQ", BootErrorModule.BOOT_MQ, "MQ异常,错误:{}"),
    /* mq end */;

    /**
     * 错误码
     **/
    private final int code;

    /**
     * 错误类型
     **/
    private final String type;

    /**
     * 错误模块
     **/
    private final BaseErrorModule module;

    /**
     * 错误消息模板
     **/
    private final String msgTmp;

    /**
     * 构造方法
     *
     * @param code   错误码
     * @param type   错误类型
     * @param msgTmp 错误消息模板
     */
    BootError(int code, String type, BaseErrorModule module, String msgTmp) {
        this.code = code;
        this.type = type;
        this.module = module;
        this.msgTmp = msgTmp;
    }

    /**
     * 错误码
     *
     * @return 错误码
     */
    @Override
    public int code() {
        return this.code;
    }

    /**
     * 错误类型
     *
     * @return 错误类型
     */
    @Override
    public String type() {
        return this.type;
    }

    /**
     * 错误模块
     *
     * @return 错误模块
     */
    @Override
    public BaseErrorModule module() {
        return this.module;
    }

    /**
     * 错误消息模板
     *
     * @return 错误消息模板
     */
    @Override
    public String msgTmp() {
        return this.msgTmp;
    }

}
