namespace TeleWave.Domain.Images;

/// <summary>
/// Запись общего реестра изображений приложения. Единая точка для всех картинок (постеры шоу, кадры
/// серий, фоны заставок, ручные загрузки) — файл лежит под images/{Id}{FileExtension}, а потребители
/// ссылаются на <see cref="Id"/>. Позволяет иметь общую галерею с вкладками по <see cref="Category"/>.
/// </summary>
public class Image
{
    public Guid Id { get; private set; }

    public ImageCategory Category { get; private set; }

    /// <summary>Расширение файла с точкой в нижнем регистре (например «.jpg»).</summary>
    public string FileExtension { get; private set; } = string.Empty;

    /// <summary>Имя исходного файла (для ручных загрузок) или описательная метка — для показа в галерее.</summary>
    public string? OriginalFileName { get; private set; }

    public DateTimeOffset CreatedAt { get; private set; }

    private Image() { }

    public static Image Create(
        ImageCategory category,
        string fileExtension,
        string? originalFileName
    ) =>
        new()
        {
            Id = Guid.NewGuid(),
            Category = category,
            FileExtension = Normalize(fileExtension),
            OriginalFileName = string.IsNullOrWhiteSpace(originalFileName)
                ? null
                : originalFileName.Trim(),
            CreatedAt = DateTimeOffset.UtcNow,
        };

    private static string Normalize(string extension)
    {
        var ext = extension.Trim().ToLowerInvariant();
        return ext.StartsWith('.') ? ext : "." + ext;
    }
}
