use std::fmt::Write as _;

use crate::config::Config;

pub fn render_mcp_overview(config: &Config) -> String {
    let servers = config.mcp_servers();

    if servers.is_empty() {
        return String::from("当前未配置 MCP 服务端。\n\n你可以在 config.toml 中添加 [[mcp.servers]] 来配置 MCP 服务端,\n也可以使用 .mcp.json 文件(详见 docs/mcp.md)。");
    }

    let mut output = format!("当前已配置的 MCP 服务端({}):\n", servers.len());
    for (i, server) in servers.iter().enumerate() {
        if i > 0 {
            output.push('\n');
        }
        let status = if server.is_enabled() {
            "✅ 启用"
        } else {
            "❌ 禁用"
        };
        let _ = write!(output, "## {}", server.name);
        let _ = write!(output, "\n- 状态: {status}");

        let transport_label = match server.transport {
            mcp::Transport::Stdio => "stdio(标准输入输出)",
            mcp::Transport::Sse => "SSE(Server-Sent Events)",
            mcp::Transport::StreamableHttp => "Streamable HTTP",
        };
        let _ = write!(output, "\n- 传输方式: {transport_label}");

        match server.transport {
            mcp::Transport::Stdio => {
                if let Some(cmd) = &server.command {
                    let _ = write!(output, "\n- 命令: {cmd}");
                    if !server.args.is_empty() {
                        let _ = write!(output, "\n- 参数: {}", server.args.join(" "));
                    }
                }
            }
            mcp::Transport::Sse | mcp::Transport::StreamableHttp => {
                if let Some(url) = &server.url {
                    let _ = write!(output, "\n- URL: {url}");
                }
            }
        }

        if let Some(ref agent_id) = server.agent_id {
            let _ = write!(output, "\n- Agent ID: {agent_id}");
        }

        // Effect summary
        let mut effects = Vec::new();
        if server.effect.reads_filesystem {
            effects.push("读文件");
        }
        if server.effect.writes_filesystem {
            effects.push("写文件");
        }
        if server.effect.network_access {
            effects.push("网络访问");
        }
        if server.effect.side_effects {
            effects.push("副作用");
        }
        if !effects.is_empty() {
            let _ = write!(output, "\n- 效应: {}", effects.join(", "));
        }
    }

    output
}