using System.ComponentModel;
using Kompas.Mcp.Core;
using ModelContextProtocol.Server;

namespace Kompas.Mcp.Host.Tools;

/// <summary>Системные инструменты: подключение, статус, видимость окна.</summary>
[McpServerToolType]
public sealed class SystemTools(KompasSession session)
{
    [McpServerTool(Name = "kompas_connect")]
    [Description("Подключиться к КОМПАС-3D: присоединиться к запущенному экземпляру или запустить новый, показать окно. Возвращает версию и редакцию.")]
    public async Task<string> Connect()
    {
        var info = await session.ConnectAsync();
        return $"Подключено к КОМПАС {info.Version} (build {info.BuildNumber}, {info.Edition}), ProgID {info.ProgId}.";
    }

    [McpServerTool(Name = "kompas_status")]
    [Description("Текущее состояние подключения к КОМПАС.")]
    public string Status()
        => session.IsConnected && session.LastInfo is { } i
            ? $"Подключено: КОМПАС {i.Version} ({i.Edition})."
            : "Не подключено. Вызовите kompas_connect.";

    [McpServerTool(Name = "kompas_set_visible")]
    [Description("Показать или скрыть главное окно КОМПАС.")]
    public async Task<string> SetVisible([Description("true — показать, false — скрыть")] bool visible)
    {
        await session.ConnectAsync();
        await session.SetVisibleAsync(visible);
        return visible ? "Окно КОМПАС показано." : "Окно КОМПАС скрыто.";
    }
}
