package com.yida.data.common.core.common;

import lombok.Data;

/**
 * @author sweeter
 * @date 2019/6/17
 * 接口返回对象
 */
@Data
public class ResultBean<T> {

    /**
     * 状态 200:成功
     */
    private int status = ResultStatusType.SUCCESS.getValue();

    /**
     * 中文消息
     */
    private String message = ResultMsgType.SUCCESS.getValue();

    /**
     * 总条数
     */
    private long count;

    /**
     * 数据对象
     */
    private T data;

    public ResultBean() {
        this.count = 0;
    }

    public ResultBean(T data) {
        this(ResultStatusType.SUCCESS.getValue(), ResultMsgType.SUCCESS.getValue(), data);
    }

    public ResultBean(int status, String message, T data) {
        this.status = status;
        this.message = message;
        this.data = data;
    }

    public ResultBean(int status, String message, T data, long count) {
        this.status = status;
        this.message = message;
        this.data = data;
        this.count = count;
    }

    /**
     * 失败，传入描述信息
     **/
    public static <T> ResultBean<T> buildError(String message) {
        return new ResultBean<>(ResultStatusType.FAIL.getValue(), message, null);
    }

    /**
     * 失败，传入描述信息,加错误内容
     **/
    public static <T> ResultBean<T> buildError(String message, T data) {
        return new ResultBean<>(ResultStatusType.FAIL.getValue(), message, data);
    }

    /**
     * 成功，传入数据
     **/
    public static <T> ResultBean<T> buildSuccess(T data) {
        return new ResultBean<>(ResultStatusType.SUCCESS.getValue(), ResultMsgType.SUCCESS.getValue(), data);
    }

    /**
     * 失败，传入描述信息,状态码
     **/
    public static <T> ResultBean<T> buildError(String msg, Integer code) {
        return new ResultBean<>(code, msg, null);
    }

    /**
     * 成功，传入数据,及状态码
     **/
    public static <T> ResultBean<T> buildSuccess(T data, int code) {
        return new ResultBean<>(code, null, data);
    }

    /**
     * 成功，不传入数据
     **/
    public static <T> ResultBean<T> buildSuccess() {
        return new ResultBean<>(ResultStatusType.SUCCESS.getValue(), ResultMsgType.SUCCESS.getValue(), null);
    }

    public static <T> ResultBean<T> buildSuccess(T data, long count) {
        return new ResultBean<>(ResultStatusType.SUCCESS.getValue(), ResultMsgType.SUCCESS.getValue(), data, count);
    }

    public static <T> ResultBean<T> buildSuccess(long count, T data) {
        return new ResultBean<>(ResultStatusType.SUCCESS.getValue(), null, data, count);
    }

    /**
     * 成功返回指定消息
     *
     * @param message 返回的成功消息
     * @param data    返回的数据
     * @return com.yida.data.common.core.common.ResultBean<T>
     * @author ZYJ
     * @date 2021/8/23 16:58
     */
    public static <T> ResultBean<T> buildSuccess(String message, T data) {
        return new ResultBean<>(ResultStatusType.SUCCESS.getValue(), message, data);
    }

    /**
     * 失败，传入状态码, 描述信息和失败的提示数据
     *
     * @param status  返回的状态码
     * @param message 返回的描述信息
     * @param data    返回的数据
     * @return com.yida.data.common.core.common.ResultBean<T>
     * @author ZYJ
     * @date 2021/8/23 16:59
     */
    public static <T> ResultBean<T> buildError(Integer status, String message, T data) {
        return new ResultBean<>(status, message, data);
    }
}
