namespace TeleWave.Domain.Broadcast;

/// <summary>
/// Кэш ТВ-заставки перехода. Один сгенерированный <see cref="MediaAssetId"/> на уникальную комбинацию
/// (<see cref="FromShowId"/> → <see cref="ToShowId"/>) при данной <see cref="Signature"/> (хэш названий
/// шоу и версии шаблона). Ассет создаётся в статусе Pending и рендерится ffmpeg'ом асинхронно фоновым
/// сервисом — поэтому здесь же храним, ЧЕМ его рендерить (<see cref="ChannelId"/>/<see cref="TemplateId"/>/
/// <see cref="VariantId"/>), чтобы фоновый рендерер восстановил спецификацию без участия планировщика.
/// Переиспользуется между днями и каналами; при смене названий/шаблона сигнатура меняется — новый ассет.
/// </summary>
public class BumperAsset
{
    public Guid Id { get; private set; }
    public Guid FromShowId { get; private set; }
    public Guid ToShowId { get; private set; }

    /// <summary>Канал/блок/подблок, по которым фоновый рендерер восстановит спецификацию заставки.</summary>
    public Guid ChannelId { get; private set; }
    public Guid TemplateId { get; private set; }
    public Guid VariantId { get; private set; }

    /// <summary>Хэш входных данных рендера (названия «из/в» + версия шаблона).</summary>
    public string Signature { get; private set; } = string.Empty;

    /// <summary>Сгенерированный ассет-заставка (нарезается в assets/{id} фоновым рендерером).</summary>
    public Guid MediaAssetId { get; private set; }

    public DateTimeOffset CreatedAt { get; private set; }

    private BumperAsset() { }

    public static BumperAsset Create(
        Guid channelId,
        Guid templateId,
        Guid variantId,
        Guid fromShowId,
        Guid toShowId,
        string signature,
        Guid mediaAssetId
    ) =>
        new()
        {
            Id = Guid.NewGuid(),
            ChannelId = channelId,
            TemplateId = templateId,
            VariantId = variantId,
            FromShowId = fromShowId,
            ToShowId = toShowId,
            Signature = signature,
            MediaAssetId = mediaAssetId,
            CreatedAt = DateTimeOffset.UtcNow,
        };
}
