package com.starry.admin.modules.shop.module.vo;

import java.math.BigDecimal;
import java.util.List;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import lombok.Data;

/**
 * 优惠券信息新增实体
 *
 * @author admin
 * @since 2024/7/4 15:26
 **/
@Data
public class PlayCouponInfoAddVo {

    /**
     * 优惠券名称
     */
    @NotNull(message = "优惠券名称不能为空")
    private String couponName;

    /**
     * 有效期类型（0:永久有效;1:固定时间内有效;2:领取后几天内有效）
     */
    @NotNull(message = "有效期类型不能为空")
    @Pattern(regexp = "[012]", message = "有效期类型只能为0或1或2")
    private String validityPeriodType;

    /**
     * 生效时间
     */
    private List<String> productiveTime;

    /**
     * 生效时长,validityPeriodType=2时有效
     **/
    private Integer effectiveDay;

    /**
     * 使用优惠券最近消费金额
     **/
    @NotNull(message = "使用优惠券最近消费金额不能为空")
    private BigDecimal useMinAmount = BigDecimal.ZERO;

    /**
     * 优惠类型（0:满减;1:折扣）
     */
    @NotNull(message = "优惠类型不能为空")
    @Pattern(regexp = "[01]", message = "优惠类型只能为0或1")
    private String discountType;

    /**
     * 优惠内容，文字展示
     */
    private String discountContent;

    /**
     * 折扣值
     */
    @NotNull(message = "优惠金额不能为空")
    private BigDecimal discountAmount;

    /**
     * 优惠金额是否由店铺承担（0:不是;1:是）
     */
    @NotNull(message = "优惠金额是否由店铺承担不能为空")
    @Pattern(regexp = "[01]", message = "优惠金额是否由店铺承担只能为0或1")
    private String attributionDiscounts;

    /**
     * 下单类型（0：指定单，1：随机单。2：打赏单）
     */
    @NotNull(message = "订单类型不能为空")
    @Size(min = 1, message = "下单类型不能为空")
    private List<String> placeType;

    /**
     * 店员范围（0:所有店员）
     */
    @NotNull(message = "店员范围不能为空")
    @Pattern(regexp = "[0]", message = "店员范围只能为0")
    private String clerkType;

    /**
     * 优惠券数量限制(0:不限制,1:限制)
     */
    @NotNull(message = "优惠券总数不能为空")
    @Pattern(regexp = "[01]", message = "优惠券数量限制只能为0或1")
    private String couponQuantityType;
    /**
     * 优惠券总数（-1表示不限制数量）
     */
    @NotNull(message = "优惠券总数不能为空")
    private Integer couponQuantity;

    /**
     * 已发放数量
     */
    private Integer issuedQuantity;

    /**
     * 剩余数量
     */
    private Integer remainingQuantity;

    /**
     * 店员获得最大数量是否限制
     */
    @NotNull(message = "店员获得最大数量是否限制不能为空")
    @Pattern(regexp = "[01]", message = "店员获得最大数量是否限制只能为0或1")
    private String clerkObtainedMaxQuantityType;

    /**
     * 店员获得最大数量
     */
    @NotNull(message = " 店员获得最大数量不能为空")
    private Integer clerkObtainedMaxQuantity;

    /**
     * 领取条件类型：0=所有人；1=按条件；2=白名单。
     */
    @NotNull(message = "领取条件类型不能为空")
    @Pattern(regexp = "^(0|1|2)$", message = "领取条件类型只能为0或1或2")
    private String claimConditionType;

    /**
     * 领取白名单（claimConditionType=2 时校验）：用户ID列表
     */
    private List<String> customWhitelist;

    /**
     * 顾客等级选择状态(0:未选择,1:选择)
     */
    private String customLevelCheckType;

    /**
     * 店员等级
     */
    private List<String> customLevel;

    /**
     * 用户关注公众号选择状态(0:未选择,1:选择)
     */
    private String customFollowStatusCheckType;

    /**
     * 顾客关注公众号状态(0:未关注,1:已关注)
     */
    private String customFollowStatus;

    /**
     * 顾客性别关注状态(0:未选择,1:选择)
     */
    private String customSexCheckType;
    /**
     * 顾客性别（0:未知;1:男,2:女）
     */
    private List<String> customSex;

    /**
     * 仅限新用户领取选择状态(0:未选择,1:已选择)
     */
    private String isNewUserCheckType;

    /**
     * 仅限新用户领取（0:不是;1:是）(没有下过单的用户，下单后再退单也不算)
     */
    private String newUser;
}
