package com.zhentao.vo;


import lombok.Data;

/**
 * 通用接口返回结果封装类
 * @param <T> 数据泛型类型
 */
@Data
public class ResultVo<T> {

    private Integer code;

    private String message;

    private T data;

    /** 私有构造方法，禁止外部直接实例化 */
    private ResultVo() {}

    /**
     * 成功返回（无数据）
     * @param message 提示消息
     * @return 成功结果对象
     */
    public static ResultVo<Object> success(String message) {
        ResultVo<Object> result = new ResultVo<>();
        result.setCode(200);
        result.setMessage(message);
        result.setData(null);
        return result;
    }

    /**
     * 成功返回（带数据）
     * @param message 提示消息
     * @param data 返回数据
     * @param <T> 数据类型
     * @return 成功结果对象
     */
    public static <T> ResultVo<T> success(String message, T data) {
        ResultVo<T> result = new ResultVo<>();
        result.setCode(200);
        result.setMessage(message);
        result.setData(data);
        return result;
    }

    /**
     * 失败返回（自定义状态码和消息）
     * @param code 状态码
     * @param message 提示消息
     * @return 失败结果对象
     */
    public static ResultVo<Object> fail(Integer code, String message) {
        ResultVo<Object> result = new ResultVo<>();
        result.setCode(code);
        result.setMessage(message);
        result.setData(null);
        return result;
    }

    /**
     * 失败返回（默认状态码500）
     * @param message 提示消息
     * @return 失败结果对象
     */
    public static ResultVo<Object> fail(String message) {
        return fail(500, message);
    }

    /**
     * 参数错误返回（默认状态码400）
     * @param message 提示消息
     * @return 参数错误结果对象
     */
    public static ResultVo<Object> paramError(String message) {
        return fail(400, message);
    }
}
