package com.jeelowcode.service.system.controller.vo.user.sync;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.experimental.Accessors;

/**
 * 主数据同步用户返回结果
 *
 * @author yangchenjj
 */
@Data
@Accessors(chain = true)
public class MasterUserResultVO {

    // 主数据在消费系统中的业务id
    private static final String JSON_PROPERTY_BUSINESS_DATA_ID = "busidataid";
    // 默认成功消息
    private static final String DEFAULT_SUCCESS_MESSAGE = "该条主数据消费成功！";
    // 默认失败消息
    private static final String DEFAULT_ERROR_MESSAGE = "该条主数据消费失败！";

    /**
     * 主数据的编码
     */
    private String mdmCode;
    /**
     * 主数据模型的编码
     */
    private String entityCode;
    /**
     * 主数据在消费系统中的业务id
     */
    @JsonProperty(JSON_PROPERTY_BUSINESS_DATA_ID)
    private String businessDataId;
    /**
     * 消息
     */
    private String message;
    /**
     * 是否成功
     */
    private Boolean success;

    public static MasterUserResultVO buildSuccess(String mdmCode,
                                                  String entityCode,
                                                  String businessDataId) {
        return buildSuccess(mdmCode, entityCode, businessDataId, DEFAULT_SUCCESS_MESSAGE);
    }

    /**
     * 构建成功响应结果
     *
     * @param mdmCode        主数据的编码
     * @param entityCode     主数据模型的编码
     * @param businessDataId 主数据在消费系统中的业务id
     * @param message        消息
     * @return MasterUserResult 响应结果
     */
    public static MasterUserResultVO buildSuccess(String mdmCode,
                                                  String entityCode,
                                                  String businessDataId,
                                                  String message) {
        return buildMasterResult(mdmCode, entityCode, businessDataId, message, true);
    }

    /**
     * 构建失败响应结果
     *
     * @param mdmCode        主数据的编码
     * @param entityCode     主数据模型的编码
     * @param businessDataId 主数据在消费系统中的业务id
     * @return MasterUserResult 响应结果
     */
    public static MasterUserResultVO buildFail(String mdmCode,
                                               String entityCode,
                                               String businessDataId) {
        return buildFail(mdmCode, entityCode, businessDataId, DEFAULT_ERROR_MESSAGE);
    }

    /**
     * 构建失败响应结果
     *
     * @param mdmCode        主数据的编码
     * @param entityCode     主数据模型的编码
     * @param businessDataId 主数据在消费系统中的业务id
     * @param message        消息
     * @return MasterUserResult 响应结果
     */
    public static MasterUserResultVO buildFail(String mdmCode,
                                               String entityCode,
                                               String businessDataId,
                                               String message) {
        return buildMasterResult(mdmCode, entityCode, businessDataId, message, false);
    }

    /**
     * 构建响应结果
     *
     * @param mdmCode        主数据的编码
     * @param entityCode     主数据模型的编码
     * @param businessDataId 主数据在消费系统中的业务id
     * @param message        消息
     * @param success        是否成功
     * @return MasterUserResult 响应结果
     */
    public static MasterUserResultVO buildMasterResult(String mdmCode,
                                                       String entityCode,
                                                       String businessDataId,
                                                       String message, Boolean success) {
        return new MasterUserResultVO()
                .setMdmCode(mdmCode).setEntityCode(entityCode)
                .setBusinessDataId(businessDataId).setMessage(message)
                .setSuccess(success);
    }

}
