/**
 * @description 消息通知类型定义
 * @author Claude
 * @since 2025-11-13
 */

import type { BaseDTO } from '../base';

/**
 * 消息主体实体（对应后端 TbSysMessage）
 */
export interface TbSysMessage extends BaseDTO {
  /** 消息ID（业务主键） */
  messageID?: string;
  /** 消息标题 */
  title?: string;
  /** 消息内容 */
  content?: string;
  /** 消息类型：notice-通知/announcement-公告/warning-预警/system-系统消息 */
  messageType?: string;
  /** 优先级：urgent-紧急/important-重要/normal-普通 */
  priority?: string;
  /** 发送人ID */
  senderID?: string;
  /** 发送人姓名 */
  senderName?: string;
  /** 发送人部门ID */
  senderDeptID?: string;
  /** 发送人部门名称 */
  senderDeptName?: string;
  /** 发送模式：immediate-立即发送/scheduled-定时发送 */
  sendMode?: string;
  /** 定时发送时间 */
  scheduledTime?: string;
  /** 实际发送时间 */
  actualSendTime?: string;
  /** 消息状态：draft-草稿/pending-待发送/sending-发送中/sent-已发送/failed-发送失败/cancelled-已取消 */
  status?: string;
  /** 目标用户数量 */
  targetUserCount?: number;
  /** 已发送数量 */
  sentCount?: number;
  /** 发送成功数量 */
  successCount?: number;
  /** 发送失败数量 */
  failedCount?: number;
  /** 已读数量 */
  readCount?: number;
  /** 重试次数 */
  retryCount?: number;
  /** 最大重试次数 */
  maxRetryCount?: number;
  /** 最后错误信息 */
  lastError?: string;
  /** 创建人 */
  creator?: string;
  /** 更新人 */
  updater?: string;
  /** 发送方式列表（前端辅助字段，从targets聚合） */
  sendMethods?: string[];
  /** 发送目标配置列表（前端辅助字段） */
  targets?: TbSysMessageTarget[];
}

/**
 * 消息接收对象实体（对应后端 TbSysMessageTarget）
 */
export interface TbSysMessageTarget extends BaseDTO {
  /** 消息ID */
  messageID?: string;
  /** 发送方式：system-系统消息/email-邮件/sms-短信 */
  sendMethod?: string;
  /** 接收对象类型：dept-部门/role-角色/user-用户 */
  targetType?: string;
  /** 接收对象ID */
  targetID?: string;
  /** 接收对象名称 */
  targetName?: string;
  /** 作用域部门ID（限制发送范围，防止越权） */
  scopeDeptID?: string;
}

/**
 * 用户接收消息实体（对应后端 TbSysMessageUser）
 */
export interface TbSysMessageUser extends BaseDTO {
  /** 消息ID */
  messageID?: string;
  /** 用户ID */
  userID?: string;
  /** 发送方式：system-系统消息/email-邮件/sms-短信 */
  sendMethod?: string;
  /** 是否已读 */
  isRead?: boolean;
  /** 已读时间 */
  readTime?: string;
  /** 发送状态：pending-待发送/success-发送成功/failed-发送失败 */
  sendStatus?: string;
  /** 失败原因 */
  failReason?: string;
}

/**
 * 消息VO（对应后端 MessageVO）
 */
export interface MessageVO extends TbSysMessage {
  /** 发送进度百分比 */
  sendProgress?: number;
  /** 发送成功率 */
  successRate?: number;
  /** 已读率 */
  readRate?: number;
}

/**
 * 用户消息VO（对应后端 MessageUserVO）
 */
export interface MessageUserVO extends TbSysMessageUser {
  /** 用户名 */
  username?: string;
  /** 用户真实姓名 */
  realName?: string;
  /** 用户邮箱 */
  email?: string;
  /** 用户手机 */
  phone?: string;
  /** 消息标题 */
  title?: string;
  /** 消息内容 */
  content?: string;
  /** 消息类型 */
  messageType?: string;
  /** 优先级 */
  priority?: string;
  /** 发送人姓名 */
  senderName?: string;
  /** 发送人部门名称 */
  senderDeptName?: string;
  /** 实际发送时间 */
  actualSendTime?: string;
}
