package com.easyagents.agent.runtime.memory;

/**
 * 运行时记忆策略。
 */
public class AgentMemoryPolicy {

    private AgentMemoryType type = AgentMemoryType.AUTO_CONTEXT;
    private int maxAttachedMessageCount = 50;
    private AgentMemoryCompressionParameter compressionParameter = new AgentMemoryCompressionParameter();

    /**
     * 创建默认 AutoContext 记忆策略。
     *
     * @return AutoContext 记忆策略
     */
    public static AgentMemoryPolicy autoContext() {
        AgentMemoryPolicy policy = new AgentMemoryPolicy();
        policy.setType(AgentMemoryType.AUTO_CONTEXT);
        return policy;
    }

    /**
     * 创建内存策略。
     *
     * @return 内存策略
     */
    public static AgentMemoryPolicy inMemory() {
        AgentMemoryPolicy policy = new AgentMemoryPolicy();
        policy.setType(AgentMemoryType.IN_MEMORY);
        return policy;
    }

    /**
     * 获取记忆类型。
     *
     * @return 记忆类型
     */
    public AgentMemoryType getType() {
        return type;
    }

    /**
     * 设置记忆类型。
     *
     * @param type 记忆类型
     */
    public void setType(AgentMemoryType type) {
        this.type = type == null ? AgentMemoryType.AUTO_CONTEXT : type;
    }

    /**
     * 获取最大附加消息数。
     *
     * @return 最大附加消息数
     */
    public int getMaxAttachedMessageCount() {
        return maxAttachedMessageCount;
    }

    /**
     * 设置最大附加消息数。
     *
     * @param maxAttachedMessageCount 最大附加消息数
     */
    public void setMaxAttachedMessageCount(int maxAttachedMessageCount) {
        this.maxAttachedMessageCount = maxAttachedMessageCount <= 0 ? 50 : maxAttachedMessageCount;
    }

    /**
     * 获取自动压缩参数。
     *
     * @return 自动压缩参数
     */
    public AgentMemoryCompressionParameter getCompressionParameter() {
        return compressionParameter;
    }

    /**
     * 设置自动压缩参数。
     *
     * @param compressionParameter 自动压缩参数
     */
    public void setCompressionParameter(AgentMemoryCompressionParameter compressionParameter) {
        this.compressionParameter = compressionParameter == null
                ? new AgentMemoryCompressionParameter()
                : compressionParameter;
    }
}
