using TeleWave.Application.Common.Models;

namespace TeleWave.Application.Media;

public static class MediaErrors
{
    public static readonly Error NotFound = Error.NotFound(
        "Media.NotFound",
        "Медиа-ассет не найден."
    );

    public static readonly Error UnsupportedFormat = Error.Validation(
        "Media.UnsupportedFormat",
        "Неподдерживаемое расширение файла."
    );

    public static readonly Error EmptyFileName = Error.Validation(
        "Media.EmptyFileName",
        "Имя файла не задано."
    );

    public static readonly Error FileTooLarge = Error.Validation(
        "Media.FileTooLarge",
        "Файл превышает допустимый размер загрузки."
    );

    public static readonly Error InsufficientStorage = Error.Conflict(
        "Media.InsufficientStorage",
        "Недостаточно свободного места в хранилище."
    );

    public static readonly Error SourceNotFound = Error.NotFound(
        "Media.SourceNotFound",
        "Исходный файл не найден в хранилище."
    );

    /// <summary>Чем именно занят ассет: расписанием какого канала или ролью заполнителя.</summary>
    public static Error InUse(string where) =>
        Error.Conflict(
            "Media.InUse",
            where.Length > 0
                ? $"Ассет занят ({where}) — удалить его нельзя."
                : "Ассет занят: он стоит в расписании канала или выбран заполнителем эфира."
        );

    public static readonly Error DuplicateFileName = Error.Conflict(
        "Media.DuplicateFileName",
        "Файл с таким именем уже загружен."
    );

    public static readonly Error AlreadyAttached = Error.Conflict(
        "Media.AlreadyAttached",
        "Файл уже привязан к шоу."
    );
}
