using TeleWave.Application.Common.Models;

namespace TeleWave.Application.Broadcast.Bumpers;

/// <summary>Ошибки блоков заставок. Блоки общие для всех каналов, поэтому и каталог свой, не канальный.</summary>
public static class BumperErrors
{
    public static readonly Error TemplateNotFound = Error.NotFound(
        "Bumpers.TemplateNotFound",
        "Блок заставки не найден."
    );

    public static readonly Error VariantNotFound = Error.NotFound(
        "Bumpers.VariantNotFound",
        "Подблок заставки не найден."
    );

    public static readonly Error CannotRemoveLastVariant = Error.Validation(
        "Bumpers.CannotRemoveLastVariant",
        "Нельзя удалить последний подблок — нужен хотя бы один."
    );

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

    public static readonly Error VariantInUse = Error.Conflict(
        "Bumpers.VariantInUse",
        "Подблок заставки выбран во врезке стыка."
    );

    public static readonly Error InvalidFile = Error.Validation(
        "Bumpers.InvalidFile",
        "Недопустимый файл заставки (формат или размер)."
    );

    /// <summary>Неизвестный плейсхолдер — ошибка ввода: в эфире его бы уже никто не заметил.</summary>
    public static Error UnknownPlaceholders(IEnumerable<string> tokens) =>
        Error.Validation(
            "Bumpers.UnknownPlaceholders",
            $"Неизвестные плейсхолдеры: {string.Join(", ", tokens.Select(t => $"{{{t}}}"))}."
        );
}
