package org.xyzh.common.dto.message;

import org.xyzh.common.dto.BaseDTO;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.util.Date;
import java.util.List;

/**
 * 消息主体表实体类
 *
 * @description 消息通知模块的主体表，存储消息的基本信息、发送配置和统计数据
 * @filename TbSysMessage.java
 * @author Claude
 * @copyright xyzh
 * @since 2025-11-13
 */
@Data
@EqualsAndHashCode(callSuper = true)
public class TbSysMessage extends BaseDTO {
    private static final long serialVersionUID = 1L;

    /**
     * 消息唯一标识
     */
    private String messageID;

    /**
     * 消息标题
     */
    private String title;

    /**
     * 消息内容
     */
    private String content;

    /**
     * 消息类型：notification-通知/announcement-公告/warning-预警
     */
    private String messageType;

    /**
     * 优先级：normal-普通/important-重要/urgent-紧急
     */
    private String priority;

    /**
     * 发送人用户ID
     */
    private String senderID;

    /**
     * 发送人姓名（冗余字段）
     */
    private String senderName;

    /**
     * 发送人部门ID
     */
    private String senderDeptID;

    /**
     * 发送人部门名称（冗余字段）
     */
    private String senderDeptName;

    /**
     * 发送模式：immediate-立即发送/scheduled-定时发送
     */
    private String sendMode;

    /**
     * 计划发送时间（sendMode=scheduled时必填）
     */
    private Date scheduledTime;

    /**
     * 实际发送时间
     */
    private Date actualSendTime;

    /**
     * 状态：draft-草稿/pending-待发送/sending-发送中/sent-已发送/failed-失败/cancelled-已取消
     */
    private String status;

    /**
     * 目标用户总数
     */
    private Integer targetUserCount;

    /**
     * 已发送数量
     */
    private Integer sentCount;

    /**
     * 发送成功数量
     */
    private Integer successCount;

    /**
     * 发送失败数量
     */
    private Integer failedCount;

    /**
     * 已读数量
     */
    private Integer readCount;

    /**
     * 当前重试次数
     */
    private Integer retryCount;

    /**
     * 最大重试次数
     */
    private Integer maxRetryCount;

    /**
     * 最后错误信息
     */
    private String lastError;

    /**
     * 创建人ID
     */
    private String creator;

    /**
     * 更新人ID
     */
    private String updater;

    /**
     * 发送目标配置列表（前端辅助字段，不映射到数据库）
     */
    private List<TbSysMessageTarget> targets;

    /**
     * 发送方式列表（前端辅助字段，从targets聚合）
     */
    private List<String> sendMethods;
}
