
package com.czg.market.dto;

import java.io.Serializable;
import java.time.LocalDateTime;

import com.alibaba.fastjson2.annotation.JSONField;

import java.io.Serial;

import com.czg.market.entity.SmsPushEventUser;
import com.czg.validator.group.InsertGroup;
import com.czg.validator.group.UpdateGroup;
import com.mybatisflex.annotation.Column;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 营销推送发送记录 实体类。
 *
 * @author ww
 * @since 2025-10-14
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class SmsPushEventDTO implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;
    @NotNull(message = "id不能为空",  groups = {UpdateGroup.class})
    private Long id;

    private Long shopId;

    /**
     * 推送类型 1 模版推送 2短信推送 无用 暂留
     */
    private Integer pushType;

    /**
     * 模板ID
     */
    @NotNull(message = "模板ID不能为空",  groups = {InsertGroup.class, UpdateGroup.class})
    private Long pushEventId;

    /**
     * 1 全部用户 2范围用户 3 指定用户 指定暂定一个用户
     */
    @NotNull(message = "发送范围不能为空",  groups = {InsertGroup.class, UpdateGroup.class})
    private Long userType;
    /**
     * 预计人数
     */
    @NotNull(message = "预计人数不能为空",  groups = {InsertGroup.class, UpdateGroup.class})
    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 content;
    /**
     * 发送参数json
     * {"店铺名称":"火锅店","时间":"2025-02-17"}
     */
    @NotBlank(message = "发送参数json不能为空",  groups = {InsertGroup.class, UpdateGroup.class})
    private String json;

    /**
     * 赠送券信息[{"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;

    /**
     * 发送的用户信息选项
     * userType为2时 使用
     */
    @Column(ignore = true)
    private SmsPushEventUser smsPushEventUser;
}
