package com.yami.shop.common.util.hb;


import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 *海博返回
 * @author fubojin
 * @time 2025-9-3
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class HBR {


    /**
     *
     * 结果编码(0-成功，-1-失败)
     */
    private String code;

    /**
     * 是否成功(true : 成功  false: 失败)
     */
    private boolean success;

    /**
     * 失败原因
     */
    private String failMsg;

    /**
     * 返回结果
     */
    private String responseJson;

    /**
     * 构造成功返回（无数据）
     */
    public static HBR success() {
        return HBR.builder()
                .code(HBResponseEnum.HB_SUCCESS.getCode())
                .success(Boolean.TRUE)
                .build();
    }

    /**
     * 构造成功返回（JSON字符串数据）
     * @param responseJson JSON字符串
     */
    public static HBR success(String responseJson) {
        return HBR.builder()
                .code(HBResponseEnum.HB_SUCCESS.getCode())
                .success(Boolean.TRUE)
                .responseJson(responseJson)
                .build();
    }

    /**
     * 构造成功返回（任意对象自动转 JSON）
     * @param data 任意对象
     */
    public static HBR success(Object data) {
        return HBR.builder()
                .code(HBResponseEnum.HB_SUCCESS.getCode())
                .success(Boolean.TRUE)
                .responseJson(data == null ? null : JSON.toJSONString(data))
                .build();
    }


    /**
     * 构造错误返回（默认 code = -1）
     */
    public static HBR error() {
        return HBR.builder()
                .code(HBResponseEnum.HB_ERROR.getCode())
                .success(Boolean.FALSE)
                .failMsg(HBResponseEnum.HB_ERROR.getValue())
                .build();
    }

    /**
     * 构造错误返回（默认 code = -1）
     * @param errorMsg 错误原因
     */
    public static HBR error(String errorMsg) {
        return HBR.builder()
                .code(HBResponseEnum.HB_ERROR.getCode())
                .success(Boolean.FALSE)
                .failMsg(errorMsg)
                .build();
    }

    /**
     * 构造错误返回（自定义 code）
     * @param code     错误码
     * @param errorMsg 错误原因
     */
    public static HBR error(String code, String errorMsg) {
        return HBR.builder()
                .code(code)
                .success(Boolean.FALSE)
                .failMsg(errorMsg)
                .build();
    }

    /**
     * 便捷方法：设置响应对象（自动转 JSON）
     * @param data 任意对象
     */
    public HBR withResponse(Object data) {
        this.responseJson = data == null ? null : JSON.toJSONString(data);
        return this;
    }

}
