package com.nailart.enums;

import lombok.Getter;

/**
 * @Description 统一响应状态码枚举类
 * @Classname ResptCodeEnum
 * @Date 2025/7/10 22:34
 * @Created by 21616
 */
@Getter
public enum RespCodeEnum {

    // ===================== 成功状态码 =====================
    /** 成功 */
    SUCCESS(200, "操作成功"),
    /** 创建成功 */
    CREATED(201, "资源创建成功"),
    /** 无内容（适用于删除成功等场景） */
    NO_CONTENT(204, "操作成功，无返回内容"),


    // ===================== 客户端错误 =====================
    /** 请求参数错误 */
    BAD_REQUEST(400, "请求参数格式错误或不完整"),
    /** 未授权（未登录） */
    UNAUTHORIZED(401, "请先登录"),
    /** 权限不足 */
    FORBIDDEN(403, "没有权限执行该操作"),
    /** 资源不存在 */
    NOT_FOUND(404, "请求的资源不存在"),
    /** 请求方法不支持 */
    METHOD_NOT_ALLOWED(405, "不支持的请求方法（如用GET访问POST接口）"),
    /** 请求频率过高 */
    TOO_MANY_REQUESTS(429, "请求过于频繁，请稍后再试"),


    // ===================== 服务器错误 =====================
    /** 服务器内部错误 */
    INTERNAL_SERVER_ERROR(500, "服务器内部错误，请联系管理员"),
    /** 服务暂不可用 */
    SERVICE_UNAVAILABLE(503, "服务暂时不可用，请稍后再试"),
    /** 数据库错误 */
    DATABASE_ERROR(5001, "数据库操作失败"),
    /** 缓存错误 */
    CACHE_ERROR(5002, "缓存操作失败"),


    // ===================== 业务自定义错误 =====================
    /** 数据重复（如新增已存在的记录） */
    DATA_DUPLICATE(601, "数据已存在，请勿重复添加"),
    /** 数据验证失败（如字段格式不符合要求） */
    DATA_VALIDATION_FAILED(602, "数据验证失败，请检查输入"),
    /** 第三方接口调用失败 */
    THIRD_PARTY_SERVICE_ERROR(603, "第三方服务调用失败");


    /** 状态码 */
    private final int code;
    /** 描述信息 */
    private final String message;

    // 构造方法
    RespCodeEnum(int code, String message) {
        this.code = code;
        this.message = message;
    }

    /**
     * 根据状态码获取枚举实例（可选工具方法）
     */
    public static RespCodeEnum getByCode(int code) {
        for (RespCodeEnum resultCode : values()) {
            if (resultCode.code == code) {
                return resultCode;
            }
        }
        return null;
    }
}
