package com.pavis.admin.aigc.core.agent.planner;

import com.pavis.admin.aigc.model.resp.AgentPlanResp;
import lombok.Data;

import java.io.Serial;
import java.io.Serializable;

/**
 * 规划上下文类
 * 用于在计划的创建、执行和总结过程中传递和维护状态信息
 * 该类作为计划执行流程中的核心数据载体，在的各个阶段之间传递
 * 主要职责：
 * - 存储计划ID和计划实体信息
 * - 保存用户原始请求
 * - 维护计划执行状态
 * - 存储执行结果摘要
 * - 控制是否需要生成执行总结
 */
@Data
public class PlanContext implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 会话ID
     */
    private Long conversationId;

    /**
     * 消息ID
     */
    private Long messageId;

    /**
     * 计划的唯一标识符
     */
    private Long planId;

    /**
     * 执行计划实体，包含计划的详细信息和执行步骤
     */
    private AgentPlanResp plan;

    /**
     * 用户的消息内容
     */
    private String userMessage;

    /**
     * 计划执行完成后的结果摘要
     */
    private String resultSummary;

    /**
     * 是否需要为执行结果调用大模型生成摘要，true是调用大模型，false是不调用直接输出结果
     */
    private boolean needSummary = true;

    /**
     * 计划执行是否成功的标志
     */
    private boolean success = false;

    /**
     * 使用另一个ExecutionContext实例的内容更新当前实例
     * <p>
     * 此方法会复制传入context的计划实体、用户请求和结果摘要到当前实例
     *
     * @param context 源执行上下文实例
     */
    public void updateContext(PlanContext context) {
        this.plan = context.getPlan();
        this.userMessage = context.getUserMessage();
        this.resultSummary = context.getResultSummary();
    }

}
