package com.infoepoch.pms.agent.platform.chat.application.dto;

import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.List;

/**
 * 待审批事项响应。
 */
@Getter
@AllArgsConstructor(staticName = "of")
public class PendingApprovalResponse {

    /**
     * 是否存在待审批事项。
     */
    private final boolean pending;

    /**
     * 中断 ID。
     */
    private final String interruptionId;

    /**
     * 会话 ID。
     */
    private final String sessionId;

    /**
     * 智能体 ID。
     */
    private final String agentId;

    /**
     * 智能体名称。
     */
    private final String agentName;

    /**
     * 审批摘要字段。
     */
    private final List<FieldItem> summaryFields;

    /**
     * 审批完整字段。
     */
    private final List<FieldItem> allFields;

    /**
     * 创建空待审批响应。
     *
     * @return 空响应
     */
    public static PendingApprovalResponse none() {
        return new PendingApprovalResponse(false, null, null, null, null, List.of(), List.of());
    }

    /**
     * 创建待审批响应。
     *
     * @param interruptionId 中断 ID
     * @param sessionId      会话 ID
     * @param agentId        智能体 ID
     * @param agentName      智能体名称
     * @param summaryFields  审批摘要字段
     * @param allFields      审批完整字段
     * @return 待审批响应
     */
    public static PendingApprovalResponse pending(
            String interruptionId,
            String sessionId,
            String agentId,
            String agentName,
            List<FieldItem> summaryFields,
            List<FieldItem> allFields) {
        return new PendingApprovalResponse(true, interruptionId, sessionId, agentId, agentName,
                List.copyOf(summaryFields), List.copyOf(allFields));
    }

    /**
     * 审批字段项。
     *
     * @param key   字段键
     * @param label 字段名称
     * @param value 字段值
     */
    @Getter
    @AllArgsConstructor
    public static class FieldItem {

        /**
         * 字段键。
         */
        private final String key;

        /**
         * 字段名称。
         */
        private final String label;

        /**
         * 字段值。
         */
        private final String value;
    }
}
