namespace TeleWave.Application.Common.Interfaces;

/// <summary>
/// Полная спецификация одной заставки для рендера: оформление канала + подписи + названия шоу.
/// <see cref="DurationSeconds"/> уже выровнена на длину сегмента (готовит оркестратор), а
/// <see cref="FontFile"/> — абсолютный путь к TTF внутри контейнера.
/// </summary>
public sealed record BumperRenderSpec(
    int DurationSeconds,
    int Width,
    int Height,
    string BackgroundColor,
    string BackgroundColor2,
    string AccentColor,
    string TextColor,
    string FontFile,
    string NowLabel,
    string NowTitle,
    string NextLabel,
    string NextTitle,
    string? BackgroundFile = null,
    string? MusicFile = null,
    /// <summary>Постер шоу как фон (используется, если нет загруженного фона канала; затемняется).</summary>
    string? PosterFile = null,
    /// <summary>Режим свободного текста: вместо «Сейчас/Далее» рисуются <see cref="FreeLine1"/>/<see cref="FreeLine2"/>.</summary>
    bool FreeText = false,
    string FreeLine1 = "",
    string FreeLine2 = ""
);

/// <summary>Итог рендера заставки — та же форма метаданных, что у обычного ассета после нарезки.</summary>
public sealed record BumperRenderResult(
    TimeSpan Duration,
    int SegmentSeconds,
    int SegmentCount,
    int Width,
    int Height,
    string RelativePath
);

/// <summary>
/// Порт рендера ТВ-заставок. Реализация синтезирует короткий клип (анимированный фон + текст
/// «Сейчас/Далее» + джингл) по <see cref="BumperRenderSpec"/> и режет его на HLS-сегменты в
/// assets/{assetId} — так же, как обычный ассет, чтобы раздача эфира не отличала заставку от программы.
/// </summary>
public interface IBumperRenderer
{
    Task<BumperRenderResult> RenderAsync(
        Guid assetId,
        BumperRenderSpec spec,
        CancellationToken cancellationToken
    );
}
