namespace TeleWave.Domain.Broadcast.Live;

/// <summary>Запись расписания в терминах live-калькулятора (только нужное для нарезки окна).</summary>
public sealed record LiveEntry(
    DateTimeOffset StartsAtUtc,
    DateTimeOffset EndsAtUtc,
    Guid MediaAssetId,
    int SegmentCount
);

/// <summary>Ассет-заглушка для дыр в расписании (крутится по кругу).</summary>
public sealed record LiveFiller(Guid AssetId, int SegmentCount);

public sealed record LiveInput(
    DateTimeOffset Now,
    DateTimeOffset Epoch,
    int SegmentSeconds,
    int WindowSegments,
    IReadOnlyList<LiveEntry> Entries,
    LiveFiller? Filler
);

/// <summary>Сегмент в окне: какой ассет, локальный индекс сегмента, нужен ли перед ним DISCONTINUITY.</summary>
public sealed record LiveSegment(Guid AssetId, int LocalIndex, bool Discontinuity);

public sealed record LivePlaylist(
    long MediaSequence,
    int TargetDuration,
    IReadOnlyList<LiveSegment> Segments
);
