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

namespace Kompas.Mcp.Host.Tools;

/// <summary>Инструменты валидации построения.</summary>
[McpServerToolType]
public sealed class ValidationTools(KompasSession session, ValidationService validation)
{
    [McpServerTool(Name = "validate_part")]
    [Description("Проверить построение активной детали/сборки: вернуть операции, которые в ошибке (вырождены), " +
                 "имеют код ошибки ErrorType3d или помечены «требует перестроения» (красный «!» в дереве). " +
                 "Пустой результат — построение чистое. Вызывай после операций редактирования (move_face, extrude и т.п.).")]
    public async Task<string> ValidatePart()
    {
        await session.ConnectAsync();
        var errs = await validation.ValidatePartAsync();
        if (errs.Count == 0) return "Построение чистое: операций в ошибке нет.";
        var lines = errs.Select(e =>
        {
            var flags = (e.Valid ? "" : "вырождена; ") + (e.NeedsRebuild ? "требует перестроения; " : "");
            return $"  • \"{e.Name}\": {flags}код {e.ErrorCode} — {e.Description}";
        });
        return $"Проблемных операций: {errs.Count}\n" + string.Join("\n", lines);
    }
}
