package org.xyzh.common.dto.message;

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

/**
 * 创建消息请求DTO
 *
 * @description 用于接收前端创建消息的请求参数
 * @filename MessageCreateDTO.java
 * @author Claude
 * @copyright xyzh
 * @since 2025-11-13
 */
@Data
public class MessageCreateDTO implements Serializable {
    private static final long serialVersionUID = 1L;

    /**
     * 消息标题（必填）
     */
    private String title;

    /**
     * 消息内容（必填）
     */
    private String content;

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

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

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

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

    /**
     * 接收对象列表（必填）
     */
    private List<MessageTargetDTO> targets;

    /**
     * 内部类：接收对象DTO
     */
    @Data
    public static class MessageTargetDTO implements Serializable {
        private static final long serialVersionUID = 1L;

        /**
         * 发送方式：system/email/sms，多选时逗号分隔
         * 默认：system
         */
        private String sendMethod = "system";

        /**
         * 接收对象类型：dept-部门/role-角色/user-人员
         */
        private String targetType;

        /**
         * 接收对象ID
         */
        private String targetID;

        /**
         * 接收对象名称（前端传递，用于冗余存储）
         */
        private String targetName;

        /**
         * 作用域部门ID（关键字段）
         * - dept时：与targetID相同
         * - role时：限定该角色的部门范围
         * - user时：用户所属部门ID
         */
        private String scopeDeptID;
    }
}
