package tech.easyflow.ai.mcp;

import tech.easyflow.common.util.StringUtil;
import tech.easyflow.common.web.exceptions.BusinessException;

import java.util.Locale;

/**
 * MCP 连接方式。
 */
public enum McpTransportType {

    /**
     * 标准输入输出进程通信。
     */
    STDIO("stdio"),

    /**
     * HTTP SSE 通信。
     */
    SSE("http-sse"),

    /**
     * Streamable HTTP 通信。
     */
    HTTP("http-stream");

    private final String value;

    /**
     * 创建 MCP 连接方式。
     *
     * @param value 配置值
     */
    McpTransportType(String value) {
        this.value = value;
    }

    /**
     * 获取配置值。
     *
     * @return 配置值
     */
    public String getValue() {
        return value;
    }

    /**
     * 解析连接方式。
     *
     * @param value 连接方式文本
     * @return MCP 连接方式
     */
    public static McpTransportType from(String value) {
        if (StringUtil.noText(value)) {
            return STDIO;
        }
        String normalized = value.trim().toLowerCase(Locale.ROOT);
        return switch (normalized) {
            case "stdio" -> STDIO;
            case "sse", "http-sse" -> SSE;
            case "http", "http-stream", "streamable-http" -> HTTP;
            default -> throw new BusinessException("不支持的 MCP 连接方式: " + value);
        };
    }
}
