package org.xyzh.common.dto.message;

import lombok.Data;
import java.io.Serializable;
import java.util.Date;
import java.util.List;

/**
 * 消息视图对象
 *
 * @description 用于前端展示的消息对象，包含消息主体信息和关联的接收对象列表
 * @filename MessageVO.java
 * @author Claude
 * @copyright xyzh
 * @since 2025-11-13
 */
@Data
public class MessageVO implements Serializable {
    private static final long serialVersionUID = 1L;

    // ========== 消息主体信息 ==========
    /**
     * 主键ID
     */
    private String id;

    /**
     * 消息唯一标识
     */
    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;

    /**
     * 计划发送时间
     */
    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;

    /**
     * 创建时间
     */
    private Date createTime;

    /**
     * 更新时间
     */
    private Date updateTime;

    // ========== 关联信息 ==========
    /**
     * 接收对象列表
     */
    private List<TbSysMessageTarget> targets;

    /**
     * 用户接收记录列表（仅在详情查询时返回）
     */
    private List<MessageUserVO> userMessages;

    // ========== 计算属性 ==========
    /**
     * 发送进度百分比（0-100）
     */
    public Integer getSendProgress() {
        if (targetUserCount == null || targetUserCount == 0) {
            return 0;
        }
        if (sentCount == null) {
            return 0;
        }
        return (int) Math.round((sentCount * 100.0) / targetUserCount);
    }

    /**
     * 成功率百分比（0-100）
     */
    public Integer getSuccessRate() {
        if (sentCount == null || sentCount == 0) {
            return 0;
        }
        if (successCount == null) {
            return 0;
        }
        return (int) Math.round((successCount * 100.0) / sentCount);
    }

    /**
     * 已读率百分比（0-100）
     */
    public Integer getReadRate() {
        if (successCount == null || successCount == 0) {
            return 0;
        }
        if (readCount == null) {
            return 0;
        }
        return (int) Math.round((readCount * 100.0) / successCount);
    }
}
