namespace Kompas.Mcp.Core.Query;

/// <summary>
/// Структурный «паспорт» активной детали: всё, что нужно агенту, чтобы «увидеть» модель
/// без растрового снимка. Заполняется <c>ModelInspectionService</c>, рендерится <c>InspectionText</c>.
/// </summary>
public sealed record ModelDescription
{
    /// <summary>Имя документа/детали.</summary>
    public required string Name { get; init; }

    /// <summary>Наименование детали (имя вершинного компонента; в дереве вместо «Деталь»).</summary>
    public string PartName { get; init; } = "";

    /// <summary>Обозначение детали по ЕСКД.</summary>
    public string PartMarking { get; init; } = "";

    /// <summary>Модель пуста (нет тел; габарит-«пустышка»).</summary>
    public required bool IsEmpty { get; init; }

    /// <summary>Габарит детали (null для пустой модели).</summary>
    public BoundingBox? Box { get; init; }

    /// <summary>Массово-центровочные характеристики (null для пустой модели).</summary>
    public PartInfo? Mass { get; init; }

    /// <summary>Тела детали.</summary>
    public required IReadOnlyList<BodyInfo> Bodies { get; init; }

    /// <summary>Типы всех граней (для сводки по топологии).</summary>
    public required IReadOnlyList<string> FaceTypes { get; init; }

    /// <summary>Типы всех рёбер (для сводки по топологии).</summary>
    public required IReadOnlyList<string> EdgeTypes { get; init; }

    /// <summary>Узлы дерева построения по порядку.</summary>
    public required IReadOnlyList<FeatureInfo> Features { get; init; }

    /// <summary>
    /// Модель импортирована (дерево содержит только начало координат и тело(а), без
    /// параметрической истории) — типично для импорта STEP.
    /// </summary>
    public required bool Imported { get; init; }

    /// <summary>Переменные модели.</summary>
    public required IReadOnlyList<VariableInfo> Variables { get; init; }

    /// <summary>
    /// Локализованное название типа документа для вывода: «деталь», «сборка», «чертёж» и т.д.
    /// По умолчанию «деталь».
    /// </summary>
    public string DocumentTypeName { get; init; } = "деталь";
}
