package cn.nianxx.thhotel.workflows.reservation.common.result;

import com.fasterxml.jackson.annotation.JsonProperty;
import java.time.OffsetDateTime;
import java.util.List;

/**
 * SuperAgent 邮件会话正文查询结果。只返回受控正文，不返回附件 URL 或未清洗 HTML。
 *
 * @param hotelId 酒店上下文 ID
 * @param externalConversationId 外部邮件会话 ID
 * @param messageCount 当前响应中的邮件数量
 * @param messages 按邮件接收时间正序排列的受控正文列表
 */
public record ReservationMessageConversationMessagesResult(
        @JsonProperty("hotel_id")
        String hotelId,
        @JsonProperty("external_conversation_id")
        String externalConversationId,
        @JsonProperty("message_count")
        Integer messageCount,
        List<MessageRecord> messages
) {

    /**
     * 邮件受控正文。HTML 只返回后端清洗结果，媒体引用由后续受控原文接口另行提供。
     *
     * @param externalSourceMessageId 外部来源消息 ID，对应 AgentBus source.external_message_id
     * @param externalConversationId 外部邮件会话 ID
     * @param senderSummary 发件人展示值，当前不打码
     * @param subject 邮件主题安全摘要
     * @param receivedAt 邮件来源接收时间，UTC；缺失时回退本系统接收时间
     * @param sourceSentAt 来源系统发送时间
     * @param textBody 纯文本正文
     * @param htmlBodySanitized 后端清洗后的 HTML 正文
     * @param htmlSanitizeRequired HTML 是否需要按清洗后内容渲染
     * @param htmlRenderMode HTML 渲染建议，例如 SANITIZED_HTML 或 TEXT_ONLY
     */
    public record MessageRecord(
            @JsonProperty("external_source_message_id")
            String externalSourceMessageId,
            @JsonProperty("external_conversation_id")
            String externalConversationId,
            @JsonProperty("sender_summary")
            String senderSummary,
            String subject,
            @JsonProperty("received_at")
            OffsetDateTime receivedAt,
            @JsonProperty("source_sent_at")
            OffsetDateTime sourceSentAt,
            @JsonProperty("text_body")
            String textBody,
            @JsonProperty("html_body_sanitized")
            String htmlBodySanitized,
            @JsonProperty("html_sanitize_required")
            Boolean htmlSanitizeRequired,
            @JsonProperty("html_render_mode")
            String htmlRenderMode
    ) {
    }
}
