package cn.pluss.platform.other;

import cn.pluss.platform.exception.MsgException;
import cn.pluss.platform.util.StringUtil;
import lombok.Data;

import java.math.BigDecimal;

/**
 * TODO
 * 积分商城通用请求参数
 * @author crystal
 * @date 2022/5/16 14:49
 */
@Data
public class JfShopParam {

    public static final String OPERATE_ADD = "addIntegral";

    public static final String OPERATE_USE = "useIntegral";

    public static final String LIST_TYPE_ADD = "1";

    public static final String LIST_TUPE_USE = "2";

    /**
     * 请求ID
     */
    protected String reqId;

    /**
     * 请求时间戳
     */
    protected Long timestamp;

    /**
     * 用户ID
     */
    protected String userId;

    /**
     * 列表类型 1：增加积分明细 2：消耗积分明细
     */
    protected String listType;

    /**
     * 1交易积分 2：机具活动积分 3：任务积分 4：签到积分
     */
    protected String type;

    /**
     * 当前页
     */
    protected Long current;

    /**
     * 每页显示的条数
     */
    protected Long size;

    /**
     * 备注
     */
    protected String remark;

    /**
     * 积分数量
     */
    protected BigDecimal integral;

    /**
     * 订单号
     */
    protected String orderNumber;


    protected String name;


    protected BigDecimal orderAmt;

    /**
     * 通用密钥 用于积分商城接口相关加密使用 请勿随意更改
     */
    public static String pubKey = "92532a95e7434e88bb058e9cf785b181";

    public void check(String option) {
        MsgException.checkBlank(this.getReqId(),"reqId为空！");
        MsgException.checkNull(this.getTimestamp(),"timestamp为空！");
        MsgException.checkBlank(this.getUserId(),"请求用户ID为空！");
        if(StringUtil.isNotEmpty(option)){
            MsgException.checkBlank(this.getType(),"积分类型不能为空！");
            MsgException.checkNull(this.getIntegral(),"积分数值不能为空！");
            if(OPERATE_ADD.equals(option) && "1".equals(this.getType())){
                MsgException.checkBlank(this.getOrderNumber(),"交易积分类型的操作需要填写订单号参数！");
                MsgException.checkNull(this.getOrderAmt(),"交易积分类型的操作需要填写订单金额参数");
            }
            if(OPERATE_USE.equals(option)){
                MsgException.checkBlank(this.getName(),"商品名称name参数不能为空！");
                MsgException.checkBlank(this.getOrderNumber(),"订单不能为空");
            }
        }
        if(this.getCurrent() == null){
            this.setCurrent(1L);
        }
        if(this.getSize() == null){
            this.setSize(10L);
        }
        if(StringUtil.isEmpty(this.getListType())){
            this.setListType(LIST_TYPE_ADD);
        }
        if(StringUtil.isNotEmpty(this.getListType())){
            if(!LIST_TYPE_ADD.equals(this.getListType()) && !LIST_TUPE_USE.equals(this.getListType())){
                MsgException.throwException("未知列表类型");
            }
        }
    }

    public void check() {
        this.check(null);
    }
}
