using ErsatzTV.Application.Artworks;
using ErsatzTV.Core;
using ErsatzTV.Core.Api.Channels;
using ErsatzTV.Core.Api.LibraryBrowse;
using ErsatzTV.Core.Domain;
using ErsatzTV.Core.Scheduling;

namespace ErsatzTV.Application.Channels;

public record CreateChannelFromLineup(
    string Name,
    string Number,
    string Group,
    string Categories,
    ArtworkContentTypeModel Logo,
    bool IsEnabled,
    bool ShowInEpg,
    int TemplateId,
    CreateChannelFromLineupAdvancedOptions Advanced,
    List<CreateChannelFromLineupItem> Lineup) : IRequest<Either<BaseError, CreateChannelFromLineupResponseModel>>;

public record CreateChannelFromLineupAdvancedOptions(
    PlaybackOrder? PlaybackOrder = null,
    int? FFmpegProfileId = null,
    int? WatermarkId = null,
    int? FallbackFillerId = null,
    int? PreRollFillerId = null,
    int? MidRollFillerId = null,
    int? PostRollFillerId = null,
    ChannelStreamSelectorMode? StreamSelectorMode = null,
    string StreamSelector = null,
    string PreferredAudioLanguageCode = null,
    string PreferredAudioTitle = null,
    ChannelPlayoutSource? PlayoutSource = null,
    ChannelPlayoutMode? PlayoutMode = null,
    StreamingMode? StreamingMode = null,
    string PreferredSubtitleLanguageCode = null,
    ChannelSubtitleMode? SubtitleMode = null,
    ChannelMusicVideoCreditsMode? MusicVideoCreditsMode = null,
    string MusicVideoCreditsTemplate = null,
    ChannelSongVideoMode? SongVideoMode = null,
    ChannelTranscodeMode? TranscodeMode = null,
    ChannelIdleBehavior? IdleBehavior = null,
    bool? ShuffleScheduleItems = null,
    bool? RandomStartPoint = null,
    FixedStartTimeBehavior? FixedStartTimeBehavior = null,
    IReadOnlyList<CreateChannelFromLineupClearField> Clear = null);

public record CreateChannelFromLineupItem(
    LibraryBrowseMediaType MediaType,
    CollectionType CollectionType,
    int? CollectionId,
    int? MultiCollectionId,
    int? SmartCollectionId,
    int? RerunCollectionId,
    int? MediaItemId,
    int? PlaylistId);
