package com.jeequan.jeepay.db.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.jeequan.jeepay.core.exception.BizException;
import com.jeequan.jeepay.core.model.BaseModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.apache.commons.lang3.StringUtils;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * <p>
 * 红包规则表
 * </p>
 *
 * @author [mybatis plus generator]
 * @since 2024-01-17
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("t_red_packet_rule")
public class RedPacketRule extends BaseModel {
    /**
     * 指定门店
     */
    public final static int APPOINT = 2;
    /**
     * 全部门店
     */
    public final static int ALL = 1;

    private static final long serialVersionUID=1L;

    /**
     * 规则id
     */
    @TableId(type = IdType.AUTO)
    private Long id;

    /**
     * 用户号
     */
    private String mchNo;

    /**
     * 红包类型 1：门店专享 2：平台通用
     */
    private Byte packetType;

    /**
     * 营销折扣比例 0.8 8折 0.95 表示95折 以此类推
     */
    private BigDecimal marketScale;

    /**
     * 平台补贴
     */
    private BigDecimal platScale;

    /**
     * 用户补贴红包比例 0.1 表示10% 0.2 表示 20%
     */
    private BigDecimal userPerkScale;

    /**
     * 红包有效天数
     */
    private Integer expireNumber;

    /**
     * 状态：1：启用 0：禁用
     */
    private Byte state;

    /**
     * 门店ID
     */
    private String storeId;

    /**
     * 门店名称
     */
    private String storeName;

    /**
     * 创建时间
     */
    private Date createdAt;

    /**
     * 更新时间
     */
    private Date updatedAt;

    /**
     * 门店集合
     */
    @TableField(exist = false)
    private List<String> storeIdList;

    /**
     * 配置类型 1：配置所有门店 2：指定门店
     */
    @TableField(exist = false)
    private Integer configType;


    public static LambdaQueryWrapper<RedPacketRule> gw() {
        return new LambdaQueryWrapper<>();
    }
    public static LambdaQueryWrapper<RedPacketRule> gw(RedPacketRule info) {
        return new LambdaQueryWrapper<>(info);
    }

    public void check(){
        if(this.getPacketType() == null){
            throw new BizException("红包类型不能为空");
        }
        if(this.getMarketScale() == null){
            throw new BizException("营销折扣比例不能为空");
        }
        if(this.getPlatScale() == null){
            throw new BizException("平台补贴比例不能为空");
        }
        if(this.getPlatScale() == null){
            throw new BizException("顾客获得红包比例不能为空");
        }
        if(this.getExpireNumber() == null){
            throw new BizException("有效期不能为空");
        }
    }

    public void preCheck() {
        check();
        if(this.getConfigType() == null){
            throw new BizException("配置规则类型不能为空");
        }
        if(StringUtils.isEmpty(this.getMchNo())){
            throw new BizException("所属商户不能为空");
        }
        //如果为指定门店的时候
        if(this.getConfigType() == APPOINT){
            if(this.getStoreIdList() == null || this.getStoreIdList().isEmpty()){
                throw new BizException("配置规则类型为指定门店的时候，请选择支持的门店");
            }
        }
    }
}
