
package com.czg.market.dto;

import java.io.Serializable;
import java.time.LocalDateTime;
import com.alibaba.fastjson2.annotation.JSONField;
import com.czg.market.entity.SmsPushEventUser;
import com.czg.validator.group.InsertGroup;
import com.czg.validator.group.UpdateGroup;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.experimental.Accessors;
import java.io.Serial;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 公众号推送任务 实体类。
 *
 * @author ww
 * @since 2025-10-20
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class AcPushEventDTO implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    private Long id;

    private Long shopId;

    /**
     * 1 全部用户 2范围用户 3 指定用户
     */
    private Long userType;

    /**
     * 预计人数
     */
    private Long estimateNum;

    /**
     * 实际人数
     */
    private Long actualNum;

    /**
     * 成功人数
     */
    private Long successNum;

    /**
     * 指定用户时 使用
     */
    private String userId;

    /**
     * 0待发送 1 发送中  2发送成功 -1失败
     */
    private Integer status;

    /**
     * 商家名称(客户)
     */
    @NotBlank(message = "商家名称不能为空",  groups = {InsertGroup.class, UpdateGroup.class})
    private String shopName;

    /**
     * 活动描述(商品名称)
     */
    @NotBlank(message = "活动描述不能为空",  groups = {InsertGroup.class, UpdateGroup.class})
    private String activityDetail;

    /**
     * 活动时间(发货时间)
     */
    @NotBlank(message = "活动时间不能为空",  groups = {InsertGroup.class, UpdateGroup.class})
    private String activityTime;

    /**
     * 商家地址(收货地址)
     */
    private String address;

    /**
     * 赠送券信息[{"id":"268700","num":12,"title":"邀新10元优惠券"}]
     */
    private String coupon;

    /**
     * 发送类型 1 立即发送 2定时发送
     */
    @NotNull(message = "发送类型不能为空",  groups = {InsertGroup.class, UpdateGroup.class})
    private Integer sendType;

    /**
     * 发送时间
     */
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime sendTime;

    /**
     * 创建时间
     */
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;

    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;

    /**
     * 失败原因
     */
    private String error;

    /**
     * 逻辑删除
     */
    private Integer isDel;

    /**
     * 发送的用户信息选项
     * userType为2时 使用
     */
    private SmsPushEventUser pushEventUser;

}
