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

namespace Kompas.Mcp.Host.Tools;

/// <summary>«Зрение агента»: снимок 3D-модели.</summary>
[McpServerToolType]
public sealed class VisionTools(KompasSession session, SnapshotService snapshot)
{
    [McpServerTool(Name = "model_snapshot")]
    [Description("Растровый снимок активной 3D-модели в PNG — FALLBACK. Сначала используйте describe_model (структурный паспорт: " +
                 "дерево, топология, габарит, МЦХ) — он точнее и дешевле. Снимок берите только для визуально-пространственных " +
                 "вопросов, на которые структурные запросы не отвечают: взаимное расположение, ориентация, общая форма.")]
    public async Task<ImageContentBlock> Snapshot(
        [Description("Разрешение в DPI; 0 — экранное")] int resolution = 0)
    {
        await session.ConnectAsync();
        var snap = await snapshot.CaptureActiveModelAsync(resolution: resolution);
        // FromBytes хранит сырые байты и сам кодирует их в base64 для поля Data.
        return ImageContentBlock.FromBytes(snap.Bytes, snap.MimeType);
    }
}
