package com.hdkj.lt.base.model.response;

import com.hdkj.hussar.IResultCode;

import java.util.Objects;

/**
 * @Description: 返回状态码，轻骑兵平台已存在该类，这里重新实现，可直接追加
 * @Author: wenhao
 * @Create: 2022/08/12 17:51
 * @Version: 1.0
 */
public enum ResultCode implements IResultCode {

    /**
     * 未知异常,请联系管理员
     */
    UNKNOWN(-1, "未知异常,请联系管理员"),
    /**
     * 请求未授权
     */
    UN_AUTHORIZED(401, "请求未授权"),
    /**
     * 客户端请求未授权
     */
    CLIENT_UN_AUTHORIZED(401, "客户端请求未授权"),
    /**
     * 没找到请求
     */
    NOT_FOUND(404, "404 没找到请求"),
    /**
     * 消息不能读取
     */
    MSG_NOT_READABLE(400, "消息不能读取"),
    /**
     * 不支持当前请求方法
     */
    METHOD_NOT_SUPPORTED(405, "不支持当前请求方法"),
    /**
     * 不支持当前请求数据格式
     */
    CONTENT_TYPE_NOT_SUPPORTED(406, "不支持当前请求数据格式"),
    /**
     * 不支持当前媒体类型
     */
    MEDIA_TYPE_NOT_SUPPORTED(415, "不支持当前媒体类型"),
    /**
     * 请求被拒绝
     */
    REQ_REJECT(403, "请求被拒绝"),
    /**
     * 请求重复，请稍后重试
     */
    REQ_REPETITION(407, "请求重复，请稍后重试"),
    /**
     * 锁等待超时
     */
    GET_LOCK_FAIL(408, "锁等待超时"),
    /**
     * 服务器异常
     */
    INTERNAL_SERVER_ERROR(500, "服务器异常"),
    /**
     * 非法参数
     */
    INVALID_PARAM(400, "非法参数"),
    /**
     * 缺少必要的请求参数
     */
    PARAM_MISS(400, "缺少必要的请求参数"),
    /**
     * 请求参数类型错误
     */
    PARAM_TYPE_ERROR(400, "请求参数类型错误"),
    /**
     * 请求参数绑定错误
     */
    PARAM_BIND_ERROR(400, "请求参数绑定错误"),
    /**
     * 参数校验失败
     */
    PARAM_VALID_ERROR(400, "参数校验失败"),
    /**
     * 网关超时
     */
    GATEWAY_CONNECT_TIME_OUT(000020, "网关超时"),
    /**
     * 服务未找到
     */
    GATEWAY_NOT_FOUND_SERVICE(000404, "服务未找到"),
    /**
     * 网关异常
     */
    GATEWAY_ERROR(000500, "网关异常"),
    /**
     * 无效token
     */
    INVALID_TOKEN(010010, "无效token"),
    /**
     * feign 服务间调用异常
     */
    FEIGN_TRANSFER_ERROR(15572, "feign 服务间调用异常"),
    /**
     *
     */
    INVALID_LOGIN(10099, "登录失效"),
    /**
     * 未知错误
     */
    SERVER_ERROR(99999, "未知错误");


    int code; //操作代码

    String message; //提示信息

    public int getCode() {
        return this.code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMessage() {
        return this.message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    ResultCode(final int code, final String message) {
        this.code = code;
        this.message = message;
    }

    public static ResultCode getByCode(int code) {
        ResultCode[] values = values();
        for (ResultCode item : values) {
            if (Objects.equals(item.getCode(), code)) {
                return item;
            }
        }
        return null;
    }

}
