package com.wms_main.model.dto.response.wcs;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.wms_main.constant.enums.wcs.WcsApiResponseCodeEnums;
import com.wms_main.constant.enums.wms.WmsApiResponseCodeEnums;
import com.wms_main.model.dto.response.wms.WmsApiResponse;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;

@EqualsAndHashCode(callSuper = true)
@Data
@AllArgsConstructor
@NoArgsConstructor
public class WcsApiResponse<T> extends BaseWcsApiResponse {
    /**
     * 返回数据
     */
    @JsonProperty("data")
    private T data;

    /**
     * 返回成功---无参
     * @return WcsApiResponse
     */
    public static <T> WcsApiResponse<T> success(T data) {
        return success(WcsApiResponseCodeEnums.SUCCESS.getMessage(), data);
    }

    /**
     * 返回成功
     * @param message 自定义响应信息
     * @return WcsApiResponse
     */
    public static <T> WcsApiResponse<T> success(String message, T data) {
        return instanceOf(WcsApiResponseCodeEnums.SUCCESS.getCode(), message, data);
    }

    /**
     * 返回错误---无参
     * @return WcsApiResponse
     */
    public static <T> WcsApiResponse<T> error(T data) {
        return error(WcsApiResponseCodeEnums.ERROR.getMessage(), data);
    }

    /**
     * 返回错误
     * @param message 自定义响应信息
     * @return WcsApiResponse
     */
    public static <T> WcsApiResponse<T> error(String message, T data) {
        return instanceOf(WcsApiResponseCodeEnums.ERROR.getCode(), message, data);
    }

    /**
     * 返回自定义
     * @param code 状态码
     * @param message 自定义响应信息
     * @return WcsApiResponse 响应实例
     */
    public static <T> WcsApiResponse<T> instanceOf(Integer code, String message, T data) {
        WcsApiResponse<T> wcsApiResponse = new WcsApiResponse<>();
        wcsApiResponse.setCode(code);
        wcsApiResponse.setMessage(message);
        wcsApiResponse.setData(data);
        return wcsApiResponse;
    }
}
