using Kompas.Mcp.Core.Modeling;

namespace Kompas.Mcp.Tests;

/// <summary>
/// Ответ по надписи. Агент вписывает текст в заданное поле, поэтому ему нужен габарит ГЛИФОВ;
/// ширина ячейки (ksGetTextLengthFromReference) больше него на 1–2 % у наборных шрифтов и на
/// 7–9 % у скриптовых — подстановка одного вместо другого промахивается мимо поля.
/// </summary>
[Trait("Category", "Unit")]
public sealed class TextMetricsTests
{
    [Fact]
    public void Box_and_cell_are_both_reported()
    {
        var m = new TextMetrics(94.57, (1.0, 12.14, 87.93, 28.94));

        var text = m.Describe("OldMan");

        Assert.Contains("OldMan", text, StringComparison.Ordinal);
        Assert.Contains("1.00…87.93", text, StringComparison.Ordinal);   // габарит по X
        Assert.Contains("12.14…28.94", text, StringComparison.Ordinal);  // габарит по Y
        Assert.Contains("86.93 × 16.80", text, StringComparison.Ordinal); // ширина × высота глифов
        Assert.Contains("94.57", text, StringComparison.Ordinal);        // ячейка — отдельно
    }

    [Fact]
    public void Missing_box_is_stated_instead_of_being_faked()
    {
        var text = new TextMetrics(50.0, null).Describe("EDITION");

        Assert.Contains("50.00", text, StringComparison.Ordinal);
        Assert.Contains("не отдал", text, StringComparison.Ordinal);
    }

    [Fact]
    public void Decimal_separator_does_not_depend_on_the_machine_locale()
    {
        var text = new TextMetrics(1.5, (0, 0, 1, 2)).Describe("x");

        // Запятая в строке есть — она разделяет оси; проверяем именно дробную часть числа.
        Assert.Contains("1.50", text, StringComparison.Ordinal);
        Assert.DoesNotContain("1,50", text, StringComparison.Ordinal);
    }
}
