package com.easyagents.agent.runtime.model;

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

/**
 * 运行时模型适配器使用的生成参数。
 */
public class AgentGenerationOptions {

    private Double temperature;
    private Double topP;
    private Integer topK;
    private Integer maxTokens;
    private Integer maxCompletionTokens;
    private Integer thinkingBudget;
    private String reasoningEffort;
    private Boolean thinkingEnabled;
    private Boolean stream = true;
    private Map<String, Object> additionalBodyParams = new LinkedHashMap<>();
    private Map<String, String> additionalHeaders = new LinkedHashMap<>();
    private Map<String, String> additionalQueryParams = new LinkedHashMap<>();

    /**
     * 获取temperature。
     *
     * @return temperature 参数
     */
    public Double getTemperature() {
        return temperature;
    }

    /**
     * 设置temperature。
     *
     * @param temperature temperature 参数
     */
    public void setTemperature(Double temperature) {
        this.temperature = temperature;
    }

    /**
     * 获取top-p。
     *
     * @return top-p 参数
     */
    public Double getTopP() {
        return topP;
    }

    /**
     * 设置top-p。
     *
     * @param topP top-p 参数
     */
    public void setTopP(Double topP) {
        this.topP = topP;
    }

    /**
     * 获取top-k。
     *
     * @return top-k 参数
     */
    public Integer getTopK() {
        return topK;
    }

    /**
     * 设置top-k。
     *
     * @param topK top-k 参数
     */
    public void setTopK(Integer topK) {
        this.topK = topK;
    }

    /**
     * 获取最大 Token 数。
     *
     * @return 最大 Token 数
     */
    public Integer getMaxTokens() {
        return maxTokens;
    }

    /**
     * 设置最大 Token 数。
     *
     * @param maxTokens 最大 Token 数
     */
    public void setMaxTokens(Integer maxTokens) {
        this.maxTokens = maxTokens;
    }

    /**
     * 获取最大补全 Token 数。
     *
     * @return 最大补全 Token 数
     */
    public Integer getMaxCompletionTokens() {
        return maxCompletionTokens;
    }

    /**
     * 设置最大补全 Token 数。
     *
     * @param maxCompletionTokens 最大补全 Token 数
     */
    public void setMaxCompletionTokens(Integer maxCompletionTokens) {
        this.maxCompletionTokens = maxCompletionTokens;
    }

    /**
     * 获取思考预算。
     *
     * @return 思考预算
     */
    public Integer getThinkingBudget() {
        return thinkingBudget;
    }

    /**
     * 设置思考预算。
     *
     * @param thinkingBudget 思考预算
     */
    public void setThinkingBudget(Integer thinkingBudget) {
        this.thinkingBudget = thinkingBudget;
    }

    /**
     * 获取推理强度。
     *
     * @return 推理强度
     */
    public String getReasoningEffort() {
        return reasoningEffort;
    }

    /**
     * 设置推理强度。
     *
     * @param reasoningEffort 推理强度
     */
    public void setReasoningEffort(String reasoningEffort) {
        this.reasoningEffort = reasoningEffort;
    }

    /**
     * 返回是否provider thinking is enabled。
     *
     * @return 思考开关
     */
    public Boolean getThinkingEnabled() {
        return thinkingEnabled;
    }

    /**
     * 设置provider thinking flag。
     *
     * @param thinkingEnabled 思考开关
     */
    public void setThinkingEnabled(Boolean thinkingEnabled) {
        this.thinkingEnabled = thinkingEnabled;
    }

    /**
     * 返回是否streaming is requested。
     *
     * @return 流式开关
     */
    public Boolean getStream() {
        return stream;
    }

    /**
     * 设置流式开关。
     *
     * @param stream 流式开关
     */
    public void setStream(Boolean stream) {
        this.stream = stream;
    }

    /**
     * 获取额外请求体参数。
     *
     * @return 额外请求体参数
     */
    public Map<String, Object> getAdditionalBodyParams() {
        return additionalBodyParams;
    }

    /**
     * 设置额外请求体参数。
     *
     * @param additionalBodyParams 额外请求体参数
     */
    public void setAdditionalBodyParams(Map<String, Object> additionalBodyParams) {
        this.additionalBodyParams = additionalBodyParams == null ? new LinkedHashMap<>() : additionalBodyParams;
    }

    /**
     * 获取额外请求头。
     *
     * @return 额外请求头
     */
    public Map<String, String> getAdditionalHeaders() {
        return additionalHeaders;
    }

    /**
     * 设置额外请求头。
     *
     * @param additionalHeaders 额外请求头
     */
    public void setAdditionalHeaders(Map<String, String> additionalHeaders) {
        this.additionalHeaders = additionalHeaders == null ? new LinkedHashMap<>() : additionalHeaders;
    }

    /**
     * 获取额外查询参数。
     *
     * @return 额外查询参数
     */
    public Map<String, String> getAdditionalQueryParams() {
        return additionalQueryParams;
    }

    /**
     * 设置额外查询参数。
     *
     * @param additionalQueryParams 额外查询参数
     */
    public void setAdditionalQueryParams(Map<String, String> additionalQueryParams) {
        this.additionalQueryParams = additionalQueryParams == null ? new LinkedHashMap<>() : additionalQueryParams;
    }
}
