package com.ycwl.basic.pricing.dto.req;

import com.ycwl.basic.pricing.enums.ProductType;
import lombok.Data;

import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * 券码批次创建请求（支持可重复使用）
 */
@Data
public class VoucherBatchCreateReqV2 {
    
    /**
     * 券码批次名称
     */
    @NotBlank(message = "券码批次名称不能为空")
    private String batchName;
    
    /**
     * 景区ID
     */
    @NotNull(message = "景区ID不能为空")
    private Long scenicId;
    
    /**
     * 推客ID
     */
    @NotNull(message = "推客ID不能为空")
    private Long brokerId;
    
    /**
     * 优惠类型：0=全场免费，1=商品降价，2=商品打折
     */
    @NotNull(message = "优惠类型不能为空")
    private Integer discountType;
    
    /**
     * 优惠值（降价金额或折扣百分比）
     */
    private BigDecimal discountValue;
    
    /**
     * 适用商品类型列表
     */
    private List<ProductType> applicableProducts;
    
    /**
     * 券码总数量
     */
    @NotNull(message = "券码数量不能为空")
    @Min(value = 1, message = "券码数量必须大于0")
    private Integer totalCount;
    
    /**
     * 每个券码最大使用次数（NULL表示无限次，1表示单次使用）
     */
    private Integer maxUseCount;
    
    /**
     * 每个用户最大使用次数（NULL表示无限次）
     */
    private Integer maxUsePerUser;
    
    /**
     * 两次使用间隔小时数（NULL表示无间隔限制）
     */
    private Integer useIntervalHours;
    
    /**
     * 有效期开始时间（NULL表示无开始时间限制）
     */
    private Date validStartTime;
    
    /**
     * 有效期结束时间（NULL表示无结束时间限制）
     */
    private Date validEndTime;
}