using ErsatzTV.Core.Domain.Filler;
using Newtonsoft.Json;

namespace ErsatzTV.Core.Domain;

public abstract class ProgramScheduleItem
{
    public int Id { get; set; }
    public int Index { get; set; }
    public StartType StartType => StartTime.HasValue ? StartType.Fixed : StartType.Dynamic;
    public TimeSpan? StartTime { get; set; }
    public ProgramScheduleItemCollectionType CollectionType { get; set; }
    public GuideMode GuideMode { get; set; }
    public string CustomTitle { get; set; }
    public int ProgramScheduleId { get; set; }

    [JsonIgnore]
    public ProgramSchedule ProgramSchedule { get; set; }

    public int? CollectionId { get; set; }
    public Collection Collection { get; set; }
    public int? MediaItemId { get; set; }
    public MediaItem MediaItem { get; set; }
    public int? MultiCollectionId { get; set; }
    public MultiCollection MultiCollection { get; set; }
    public int? SmartCollectionId { get; set; }
    public SmartCollection SmartCollection { get; set; }
    public int? PlaylistId { get; set; }
    public Playlist Playlist { get; set; }
    public string FakeCollectionKey { get; set; }
    public PlaybackOrder PlaybackOrder { get; set; }
    public int? PreRollFillerId { get; set; }
    public FillerPreset PreRollFiller { get; set; }
    public int? MidRollFillerId { get; set; }
    public FillerPreset MidRollFiller { get; set; }
    public int? PostRollFillerId { get; set; }
    public FillerPreset PostRollFiller { get; set; }
    public int? TailFillerId { get; set; }
    public FillerPreset TailFiller { get; set; }
    public int? FallbackFillerId { get; set; }
    public FillerPreset FallbackFiller { get; set; }
    public ChannelWatermark Watermark { get; set; }
    public int? WatermarkId { get; set; }
    public string PreferredAudioLanguageCode { get; set; }
    public string PreferredAudioTitle { get; set; }
    public string PreferredSubtitleLanguageCode { get; set; }
    public ChannelSubtitleMode? SubtitleMode { get; set; }
    public FillWithGroupMode FillWithGroupMode { get; set; }
}
