using TeleWave.Application.Common.Models;

namespace TeleWave.Application.Programming.Templates;

public static class TemplateErrors
{
    public static readonly Error NotFound = Error.NotFound(
        "Templates.NotFound",
        "Шаблон сетки не найден."
    );

    public static readonly Error LayerNotFound = Error.NotFound(
        "Templates.LayerNotFound",
        "Слой сетки не найден."
    );

    public static readonly Error SlotNotFound = Error.NotFound(
        "Templates.SlotNotFound",
        "Слот не найден."
    );

    public static readonly Error BackgroundLayerCannotBeDeleted = Error.Validation(
        "Templates.BackgroundLayerCannotBeDeleted",
        "Фоновый слой удалить нельзя — без него в сетке появятся дыры."
    );

    public static readonly Error SlotsOverlap = Error.Conflict(
        "Templates.SlotsOverlap",
        "Слоты одного слоя пересекаются по времени."
    );

    public static readonly Error GroupRequired = Error.Validation(
        "Templates.GroupRequired",
        "Слоту с контентом нужна группа."
    );

    public static readonly Error GroupNotFound = Error.NotFound(
        "Templates.GroupNotFound",
        "Группа не найдена."
    );

    public static readonly Error InterstitialGroupInSlot = Error.Validation(
        "Templates.InterstitialGroupInSlot",
        "В слоте группа роликов — в эфир уйдёт полоса рекламы, подписанная как программа. "
            + "Ролики ставятся врезками стыка, а не слотом."
    );

    public static readonly Error InterstitialFallbackGroup = Error.Validation(
        "Templates.InterstitialFallbackGroup",
        "Аварийной группой выбрана группа роликов — тогда каждая пауза в эфире станет рекламой. "
            + "Выберите группу контента или снимите её вовсе."
    );

    public static readonly Error JunctionNotFound = Error.NotFound(
        "Templates.JunctionNotFound",
        "Шаблон стыка не найден."
    );

    public static readonly Error JunctionElementNotFound = Error.NotFound(
        "Templates.JunctionElementNotFound",
        "Врезка не найдена."
    );

    /// <summary>Стык общий, поэтому держать его может слот чужого канала — называем какого.</summary>
    public static Error JunctionInUse(string where) =>
        Error.Conflict(
            "Templates.JunctionInUse",
            where.Length > 0
                ? $"Стык используется ({where}) — сначала отвяжите его там."
                : "Стык используется слотами — сначала отвяжите его."
        );

    public static readonly Error JunctionGroupRequired = Error.Validation(
        "Templates.JunctionGroupRequired",
        "Врезке нужна группа, откуда брать ролики."
    );

    public static readonly Error NothingToRestore = Error.Validation(
        "Templates.NothingToRestore",
        "Откатывать не к чему: сетка ещё ни разу не применялась."
    );

    public static readonly Error NoGroupsToGenerate = Error.Validation(
        "Templates.NoGroupsToGenerate",
        "Собирать сетку не из чего: нет ни одной группы с готовым медиа."
    );

    public static readonly Error RepeatSourceRequired = Error.Validation(
        "Templates.RepeatSourceRequired",
        "Слоту-повтору нужно указать, что повторять."
    );
}
