namespace TeleWave.Application.Common.Models;

/// <summary>
/// Склейка ответа на вопрос «где это используется» для текста ошибки. Отказ вида «объект занят»
/// без адреса заставляет обходить все экраны подряд, а перечисление держателей превращает ошибку
/// в инструкцию: видно, что именно отвязать.
/// </summary>
public static class UsageText
{
    /// <summary>Сколько имён показываем: длинный список в тосте всё равно не читается.</summary>
    private const int MaxNames = 5;

    /// <summary>Раздел перечисления: «слоты каналов: Первый, Второй». Пустой список — пропускается.</summary>
    public static string? Part(string what, IReadOnlyCollection<string> names)
    {
        if (names.Count == 0)
            return null;

        var shown = string.Join(", ", names.Take(MaxNames));
        return names.Count > MaxNames
            ? $"{what}: {shown} и ещё {names.Count - MaxNames}"
            : $"{what}: {shown}";
    }

    /// <summary>Собирает разделы в одну строку; пустые отбрасываются.</summary>
    public static string Join(params string?[] parts) =>
        string.Join("; ", parts.Where(p => !string.IsNullOrWhiteSpace(p)));
}
