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

import com.infoepoch.pms.agent.platform.agent.domain.Agent;
import com.infoepoch.pms.agent.platform.chatbot.domain.Chatbot;
import lombok.Getter;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 聊天机器人摘要响应 DTO。
 */
@Getter
public class ChatbotSummaryResponse {

    /** 聊天机器人主键。 */
    private final String id;

    /** 聊天机器人名称。 */
    private final String name;

    /** 聊天机器人描述。 */
    private final String description;

    /** 系统提示词。 */
    private final String systemPrompt;

    /** 模型配置主键。 */
    private final String modelConfigId;

    /** 启用工具标识列表。 */
    private final List<String> enabledTools;

    /** 上下文窗口大小。 */
    private final int contextWindowSize;

    /** 是否启用。 */
    private final boolean enabled;

    /** 创建时间。 */
    private final LocalDateTime createdAt;

    /** 最后更新时间。 */
    private final LocalDateTime updatedAt;

    /** 子智能体精简信息列表。 */
    private final List<SubAgentSummary> subAgents;

    /**
     * 根据聊天机器人实体构造摘要响应。
     *
     * @param chatbot 聊天机器人实体
     */
    public ChatbotSummaryResponse(Chatbot chatbot) {
        this.id = chatbot.getId();
        this.name = chatbot.getName();
        this.description = chatbot.getDescription();
        this.systemPrompt = chatbot.getSystemPrompt();
        this.modelConfigId = chatbot.getModelConfig() != null ? chatbot.getModelConfig().getId() : chatbot.getModelConfigId();
        this.enabledTools = chatbot.getEnabledTools();
        this.contextWindowSize = chatbot.getContextWindowSize();
        this.enabled = chatbot.isEnabled();
        this.createdAt = chatbot.getCreatedAt();
        this.updatedAt = chatbot.getUpdatedAt();
        this.subAgents = chatbot.getSubAgents().stream()
                .map(SubAgentSummary::new)
                .toList();
    }

    /**
     * 子智能体精简响应 DTO。
     */
    @Getter
    public static class SubAgentSummary {

        /** 子智能体主键。 */
        private final String id;

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

        /**
         * 根据智能体实体构造精简响应。
         *
         * @param agent 智能体实体
         */
        public SubAgentSummary(Agent agent) {
            this.id = agent.getId();
            this.name = agent.getName();
        }
    }

}
