package com.easyagents.agent.runtime.knowledge;

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

/**
 * 知识库声明。
 */
public class AgentKnowledgeSpec {

    private String knowledgeId;
    private String runtimeName;
    private String name;
    private String description;
    private int limit = 5;
    private double scoreThreshold = 0D;
    private Map<String, Object> metadata = new LinkedHashMap<>();

    /**
     * 获取知识库ID。
     *
     * @return 知识库ID
     */
    public String getKnowledgeId() {
        return knowledgeId;
    }

    /**
     * 设置知识库ID。
     *
     * @param knowledgeId 知识库ID
     */
    public void setKnowledgeId(String knowledgeId) {
        this.knowledgeId = knowledgeId;
    }

    /**
     * 获取调用方提供的英文运行名。
     *
     * @return 英文运行名
     */
    public String getRuntimeName() {
        return runtimeName;
    }

    /**
     * 设置调用方提供的英文运行名。
     *
     * @param runtimeName 英文运行名
     */
    public void setRuntimeName(String runtimeName) {
        this.runtimeName = runtimeName;
    }

    /**
     * 获取知识库名称。
     *
     * @return 知识库名称
     */
    public String getName() {
        return name;
    }

    /**
     * 设置知识库名称。
     *
     * @param name 知识库名称
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取描述。
     *
     * @return 描述
     */
    public String getDescription() {
        return description;
    }

    /**
     * 设置描述。
     *
     * @param description 描述
     */
    public void setDescription(String description) {
        this.description = description;
    }

    /**
     * 获取限制数量。
     *
     * @return 限制数量
     */
    public int getLimit() {
        return limit;
    }

    /**
     * 设置限制数量。
     *
     * @param limit 限制数量
     */
    public void setLimit(int limit) {
        this.limit = limit <= 0 ? 5 : limit;
    }

    /**
     * 获取分数阈值。
     *
     * @return 分数阈值
     */
    public double getScoreThreshold() {
        return scoreThreshold;
    }

    /**
     * 设置分数阈值。
     *
     * @param scoreThreshold 分数阈值
     */
    public void setScoreThreshold(double scoreThreshold) {
        this.scoreThreshold = Math.max(0D, scoreThreshold);
    }

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

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