package com.easyagents.agent.runtime.tool;

import java.util.LinkedHashMap;
import java.util.Map;

/**
 * 动态工具返回的结果。
 */
public class AgentToolResult {

    private boolean success = true;
    private String modelContent;
    private Object displayContent;
    private String errorMessage;
    private Map<String, Object> metadata = new LinkedHashMap<>();

    /**
     * 创建成功的文本结果。
     *
     * @param content 模型可见内容
     * @return 结果
     */
    public static AgentToolResult success(String content) {
        AgentToolResult result = new AgentToolResult();
        result.setModelContent(content);
        result.setDisplayContent(content);
        return result;
    }

    /**
     * 创建失败结果。
     *
     * @param errorMessage 错误消息
     * @return 结果
     */
    public static AgentToolResult failure(String errorMessage) {
        AgentToolResult result = new AgentToolResult();
        result.setSuccess(false);
        result.setErrorMessage(errorMessage);
        result.setModelContent(errorMessage);
        return result;
    }

    /**
     * 返回执行是否成功。
     *
     * @return 成功时为 true
     */
    public boolean isSuccess() {
        return success;
    }

    /**
     * 设置成功标记。
     *
     * @param success 成功标记
     */
    public void setSuccess(boolean success) {
        this.success = success;
    }

    /**
     * 获取模型可见内容。
     *
     * @return 模型可见内容
     */
    public String getModelContent() {
        return modelContent;
    }

    /**
     * 设置模型可见内容。
     *
     * @param modelContent 模型可见内容
     */
    public void setModelContent(String modelContent) {
        this.modelContent = modelContent;
    }

    /**
     * 获取展示内容。
     *
     * @return 展示内容
     */
    public Object getDisplayContent() {
        return displayContent;
    }

    /**
     * 设置展示内容。
     *
     * @param displayContent 展示内容
     */
    public void setDisplayContent(Object displayContent) {
        this.displayContent = displayContent;
    }

    /**
     * 获取错误消息。
     *
     * @return 错误消息
     */
    public String getErrorMessage() {
        return errorMessage;
    }

    /**
     * 设置错误消息。
     *
     * @param errorMessage 错误消息
     */
    public void setErrorMessage(String errorMessage) {
        this.errorMessage = errorMessage;
    }

    /**
     * 获取元数据。
     *
     * @return 元数据
     */
    public Map<String, Object> getMetadata() {
        return metadata;
    }

    /**
     * 设置元数据。
     *
     * @param metadata 元数据
     */
    public void setMetadata(Map<String, Object> metadata) {
        this.metadata = metadata == null ? new LinkedHashMap<>() : metadata;
    }
}
