package xtools.boot.db.mybatis.enums;

import xtools.boot.api.enums.BaseEnum;

/**
 * <p>Title : MySqlMonitorEnums</p>
 * <p>Description : MySqlMonitorEnums</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 : 2026/2/3 10:31
 */
public enum MySqlMonitorEnums implements BaseEnum {

    // 进程列表
    PROCESSLIST(1, "进程列表", "SHOW FULL PROCESSLIST"),
    // 变量
    VARIABLES(2, "变量", "SHOW GLOBAL VARIABLES"),
    // 状态
    STATUS(3, "状态", "SHOW STATUS"),
    // 表信息
    TABLE(1000, "表信息", "SHOW TABLE STATUS"),

    // 需要权限
//    // 查看正在进行中的事务
//    INNODB_TRX(100, "查看正在进行中的事务", "SELECT * FROM information_schema.INNODB_TRX"),
//    // 查看正在锁的事务
//    INNODB_LOCKS(101, "查看正在锁的事务", "SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS"),
//    // 查看等待锁的事务
//    INNODB_LOCK_WAITS(102, "查看等待锁的事务", "SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS"),
//    // 查询是否锁表
//    LOCK_TABLES(103, "查询是否锁表", "SHOW OPEN TABLES where In_use > 0"),
//    // 查看最近死锁的日志
//    INNODB_STATUS(104, "查看最近死锁的日志", "show engine innodb status"),

    ;

    /**
     * 编码
     */
    private final int code;

    /**
     * 说明
     */
    private final String desc;

    /**
     * SQL语句
     */
    private final String sql;

    /**
     * 初始化方法
     *
     * @param code Code
     * @param desc 说明
     * @param sql  SQL
     */
    MySqlMonitorEnums(int code, String desc, String sql) {
        this.code = code;
        this.desc = desc;
        this.sql = sql;
    }

    /**
     * 判断枚举值类型
     *
     * @param code 枚举值
     * @return 枚举值类型
     */
    public static MySqlMonitorEnums valueOf(int code) {
        for (MySqlMonitorEnums type : values()) {
            if (type.code == code) {
                return type;
            }
        }
        throw new IllegalArgumentException("unknown code, code=" + code);
    }

    /**
     * 获取所有枚举
     *
     * @return 所有枚举
     */
    @Override
    public BaseEnum[] all() {
        return values();
    }

    /**
     * 获取枚举编码
     *
     * @return 枚举编码
     */
    @Override
    public int code() {
        return code;
    }

    /**
     * 获取枚举说明
     *
     * @return 枚举说明
     */
    @Override
    public String desc() {
        return desc;
    }

    /**
     * 获取SQL
     *
     * @return SQL
     */
    public String getSql() {
        return sql;
    }

}