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

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

/**
 * SuperAgent 邮件会话任务查询结果。按邮件接收时间正序，再按任务创建时间正序返回任务。
 *
 * @param hotelId 酒店上下文 ID
 * @param externalConversationId 外部邮件会话 ID
 * @param taskCount 当前响应中的任务数量
 * @param tasks 会话下关联任务列表
 */
public record ReservationMessageConversationTasksResult(
        @JsonProperty("hotel_id")
        String hotelId,
        @JsonProperty("external_conversation_id")
        String externalConversationId,
        @JsonProperty("task_count")
        Integer taskCount,
        List<TaskRecord> tasks
) {

    /**
     * 邮件会话下的任务摘要。source message 字段始终使用外部邮件 ID，避免暴露内部 Inbox 主键。
     *
     * @param taskId 本系统任务 ID
     * @param orderId 任务当前挂靠订单 ID
     * @param externalSourceMessageId 外部来源消息 ID，对应 AgentBus source.external_message_id
     * @param externalConversationId 外部邮件会话 ID
     * @param sourceReceivedAt 邮件来源接收时间，UTC；缺失时回退本系统接收时间
     * @param sourceEventIndex AI transition 来源事件序号
     * @param catalogCode Skill 目录代码
     * @param skillId Skill 标识
     * @param resultType AI 结果类型
     * @param taskType AI 原始任务类型
     * @param systemTaskType 系统主任务类型
     * @param taskCardType 前端任务卡类型
     * @param taskSubtype 业务动作 subtype
     * @param taskStatus 任务状态
     * @param queueParticipation 是否参与订单执行队列
     * @param executionOrder 同订单执行顺序
     * @param parentTaskId 父任务 ID
     * @param parentSourceEventIndex 父事件序号
     * @param linkedTaskGroupId 联动任务组 ID
     * @param blockedUntilParentCompleted 是否等待父任务完成
     * @param completedAt 任务完成时间
     * @param taskCreatedAt 任务创建时间
     * @param taskUpdatedAt 任务更新时间
     */
    public record TaskRecord(
            @JsonProperty("task_id")
            String taskId,
            @JsonProperty("order_id")
            String orderId,
            @JsonProperty("external_source_message_id")
            String externalSourceMessageId,
            @JsonProperty("external_conversation_id")
            String externalConversationId,
            @JsonProperty("source_received_at")
            OffsetDateTime sourceReceivedAt,
            @JsonProperty("source_event_index")
            Integer sourceEventIndex,
            @JsonProperty("catalog_code")
            String catalogCode,
            @JsonProperty("skill_id")
            String skillId,
            @JsonProperty("result_type")
            String resultType,
            @JsonProperty("task_type")
            String taskType,
            @JsonProperty("system_task_type")
            String systemTaskType,
            @JsonProperty("task_card_type")
            String taskCardType,
            @JsonProperty("task_subtype")
            String taskSubtype,
            @JsonProperty("task_status")
            String taskStatus,
            @JsonProperty("queue_participation")
            Boolean queueParticipation,
            @JsonProperty("execution_order")
            Integer executionOrder,
            @JsonProperty("parent_task_id")
            String parentTaskId,
            @JsonProperty("parent_source_event_index")
            Integer parentSourceEventIndex,
            @JsonProperty("linked_task_group_id")
            String linkedTaskGroupId,
            @JsonProperty("blocked_until_parent_completed")
            Boolean blockedUntilParentCompleted,
            @JsonProperty("completed_at")
            OffsetDateTime completedAt,
            @JsonProperty("task_created_at")
            OffsetDateTime taskCreatedAt,
            @JsonProperty("task_updated_at")
            OffsetDateTime taskUpdatedAt
    ) {
    }
}
