using TeleWave.Domain.Broadcast;

namespace TeleWave.Application.Streaming;

public sealed record PublicChannelDto(
    Guid Id,
    string Slug,
    string Name,
    /// <summary>Номер канала для переключения по номерам или null, если не задан.</summary>
    int? Number,
    Guid? CurrentShowId,
    string? CurrentShowName,
    Guid? CurrentShowPosterImageId,
    /// <summary>Что рисовать поверх картинки — оверлеи считает клиент, ffmpeg их не касается.</summary>
    Guid? LogoImageId,
    LogoCorner LogoCorner,
    double LogoOpacity,
    bool ShowClock,
    double AnalogFilterStrength
);

/// <summary>Запись публичного телегида с метаданными (без имён файлов и номеров серий).</summary>
public sealed record PublicEpgEntryDto(
    ScheduleEntryKind Kind,
    DateTimeOffset StartsAtUtc,
    DateTimeOffset EndsAtUtc,
    Guid? ShowId,
    string? ShowName,
    Guid? ShowPosterImageId,
    Guid? EpisodeId,
    string? EpisodeTitle,
    string? EpisodeOverview,
    Guid? EpisodeStillImageId
);

public sealed record LiveSegmentDto(Guid AssetId, int LocalIndex, bool Discontinuity);

public sealed record LivePlaylistDto(
    long MediaSequence,
    int TargetDuration,
    IReadOnlyList<LiveSegmentDto> Segments
);
