package com.ruoyi.common.tools.result;

import java.util.HashMap;
import java.util.Map;

/**
 * 响应代码枚举
 *
 * @author zm
 * @data 2024-04-09
 */
public enum ResultCode {
    /**
     * description:
     * #200       表示请求成功
     * #500       表示请求失败
     * #1000～1999 区间表示参数错误
     * #2000～2999 区间表示用户错误
     * #3000～3999 区间表示接口异常
     * #4000～4999 区间表示网络请求错误
     * #5000～5999 区间表示服务器内部错误
     **/
    /*公共*/
    SUCCESS(200, "操作成功"),
    NO_AUTH(403, "没有权限"),
    NO_PAGE(404, "未找到页面"),

    /*用户*/
    LOGIN_ERROR(2000, "用户不存在/密码错误"),
    NOT_OPERATE_ADMIN(2001, "不允许操作管理员"),
    NOT_PERMISSION_VISIT_ROLE_DATA(2002, "没有权限访问角色数据"),

    /*接口异常*/
    SYS_ERROR(3000, "服务器未知异常，请联系管理员"),
    NULL_POINTER(3001, "空指针"),
    ARRAY_BOUND(3002, "数组越界"),
    CLASS_NOT_FOUND(3003, "未找到类"),
    IO_STREAM_FOUND(3004, "IO流异常"),
    DO_NOT_REPEAT_SUBMISSION(3005, "处理中,请勿重复提交"),
    TOO_FREQUENT(3006, "访问过于频繁，请稍候再试"),
    SERVER_LIMITING(3007, "服务器限流异常，请稍候再试"),

    /*服务器内部错误*/
    DATABASE_CONNECTION_OVERTIME(5000, "数据库连接超时"),
    DATABASE_CONNECTION_PWD(5001, "数据库连接密码错误"),
    DATABASE_CONNECTION_FAILURE(5002, "数据库连接失败");

    private Integer code;
    private String msg;

    public Integer getCode() {
        return code;
    }

    public String getMsg() {
        return msg;
    }

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

    public static final Map<Integer, ResultCode> mappings = new HashMap<>(256);

    static {
        for (ResultCode value : values()) {
            mappings.put(value.getCode(), value);
        }
    }

    public static ResultCode resolve(int code) {
        return mappings.get(code);
    }

    public boolean matches(int code) {
        return (this == resolve(code));
    }
}

