using TeleWave.Application.Common.Models;

namespace TeleWave.Application.Programming.Groups;

public static class GroupErrors
{
    public static readonly Error NotFound = Error.NotFound("Groups.NotFound", "Группа не найдена.");

    public static readonly Error ItemNotFound = Error.NotFound(
        "Groups.ItemNotFound",
        "Позиция в группе не найдена."
    );

    public static readonly Error ElementNotFound = Error.NotFound(
        "Groups.ElementNotFound",
        "Шоу или коллекция не найдены."
    );

    /// <summary>
    /// Где именно занята группа: без адреса «используется в сетке» отправляет обходить все каналы.
    /// Пустой <paramref name="where"/> — связи неполны (слой без шаблона, шаблон без канала),
    /// и тогда честнее общий текст, чем пустые скобки.
    /// </summary>
    public static Error InUse(string where) =>
        Error.Conflict(
            "Groups.InUse",
            where.Length > 0
                ? $"Группа используется в сетке ({where}) — сначала отвяжите её там."
                : "Группа используется в сетке: на неё ссылается слот или врезка стыка."
        );

    public static readonly Error FilterNotSet = Error.Validation(
        "Groups.FilterNotSet",
        "У группы не задано правило набора."
    );

    public static readonly Error ExclusionsForDynamicOnly = Error.Validation(
        "Groups.ExclusionsForDynamicOnly",
        "Исключения есть только у динамической группы — в статической состав правится списком."
    );

    public static readonly Error SuggestionNotFound = Error.NotFound(
        "Groups.SuggestionNotFound",
        "Предложение устарело — библиотека изменилась. Обновите список предложений."
    );

    public static readonly Error SuggestionAlreadyCreated = Error.Conflict(
        "Groups.SuggestionAlreadyCreated",
        "Группа с таким названием уже есть."
    );
}
