package cn.nianxx.thhotel.integrations.ai.superagent.common.result;

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

/**
 * SuperAgent Open API 调用结果。只保存最终回答和安全元数据，不保存 API Key、Cookie 或内部思考过程。
 *
 * @param sessionId SuperAgent session ID
 * @param runId SuperAgent run ID
 * @param profileId 实际使用的 profile ID
 * @param profileVersionId 实际使用的 profile version ID
 * @param modelName 模型名称
 * @param rawAnswer 最终 AI 文本回答
 * @param inputTokens 输入 token 数
 * @param outputTokens 输出 token 数
 * @param totalTokens 总 token 数
 * @param eventTypes SSE 事件类型列表
 * @param traceEvents SuperAgent 公开 Trace 事件列表，只包含可展示摘要字段
 */
public record SuperAgentOpenApiResult(
        String sessionId,
        String runId,
        String profileId,
        String profileVersionId,
        String modelName,
        String rawAnswer,
        Integer inputTokens,
        Integer outputTokens,
        Integer totalTokens,
        List<String> eventTypes,
        @JsonProperty("trace_events")
        List<SuperAgentOpenApiTraceEvent> traceEvents
) {

    /**
     * 兼容未启用 Trace 的历史调用方。
     */
    public SuperAgentOpenApiResult(
            String sessionId,
            String runId,
            String profileId,
            String profileVersionId,
            String modelName,
            String rawAnswer,
            Integer inputTokens,
            Integer outputTokens,
            Integer totalTokens,
            List<String> eventTypes) {
        this(
                sessionId,
                runId,
                profileId,
                profileVersionId,
                modelName,
                rawAnswer,
                inputTokens,
                outputTokens,
                totalTokens,
                eventTypes,
                List.of());
    }

    /**
     * 复制集合，避免结果对象被调用方后续修改。
     */
    public SuperAgentOpenApiResult {
        eventTypes = eventTypes == null ? List.of() : List.copyOf(eventTypes);
        traceEvents = traceEvents == null ? List.of() : List.copyOf(traceEvents);
    }
}
