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

namespace Kompas.Mcp.Host.Tools;

/// <summary>Инструменты обмена форматами: импорт/экспорт STEP.</summary>
[McpServerToolType]
public sealed class ConversionTools(KompasSession session, ConversionService conversion)
{
    [McpServerTool(Name = "import_step")]
    [Description("Импортировать STEP-файл (.step/.stp) в новый документ и сделать его активным. " +
                 "type: assembly (по умолчанию) | part — тип целевого документа. " +
                 "createComponentFiles=true записывает компоненты сборки отдельными .m3d рядом с исходным STEP " +
                 "(нужно, чтобы потом открыть/редактировать отдельную деталь). Возвращает тип созданного документа.")]
    public async Task<string> ImportStep(
        [Description("Полный путь к .step/.stp")] string path,
        [Description("Тип документа: assembly | part")] string type = "assembly",
        [Description("Создавать файлы компонентов сборки рядом со STEP")] bool createComponentFiles = false)
    {
        await session.ConnectAsync();
        var docType = DocumentTypes.Parse(type);
        await conversion.ImportStepAsync(path, docType, createComponentFiles);
        return $"STEP импортирован в документ типа {docType}: {path}";
    }

    [McpServerTool(Name = "export_step")]
    [Description("Экспортировать активный 3D-документ (деталь/сборку) в STEP по указанному пути. " +
                 "format: auto (по умолчанию) | ap203 | ap214 | ap242.")]
    public async Task<string> ExportStep(
        [Description("Полный путь к выходному .step")] string path,
        [Description("Стандарт STEP: auto | ap203 | ap214 | ap242")] string format = "auto")
    {
        await session.ConnectAsync();
        var fmt = StepFormats.Parse(format);
        await conversion.ExportStepAsync(path, fmt);
        return $"Экспортировано в STEP ({fmt}): {path}";
    }
}
