using System;
using System.Collections.Generic;
using System.Text.Json.Serialization;
namespace Emby.Server.Implementations.LiveTv.Listings.SchedulesDirectDtos
{
    /// 
    /// Program details dto.
    /// 
    public class ProgramDetailsDto
    {
        /// 
        /// Gets or sets the audience.
        /// 
        [JsonPropertyName("audience")]
        public string? Audience { get; set; }
        /// 
        /// Gets or sets the program id.
        /// 
        [JsonPropertyName("programID")]
        public string? ProgramId { get; set; }
        /// 
        /// Gets or sets the list of titles.
        /// 
        [JsonPropertyName("titles")]
        public IReadOnlyList Titles { get; set; } = Array.Empty();
        /// 
        /// Gets or sets the event details object.
        /// 
        [JsonPropertyName("eventDetails")]
        public EventDetailsDto? EventDetails { get; set; }
        /// 
        /// Gets or sets the descriptions.
        /// 
        [JsonPropertyName("descriptions")]
        public DescriptionsProgramDto? Descriptions { get; set; }
        /// 
        /// Gets or sets the original air date.
        /// 
        [JsonPropertyName("originalAirDate")]
        public DateTime? OriginalAirDate { get; set; }
        /// 
        /// Gets or sets the list of genres.
        /// 
        [JsonPropertyName("genres")]
        public IReadOnlyList Genres { get; set; } = Array.Empty();
        /// 
        /// Gets or sets the episode title.
        /// 
        [JsonPropertyName("episodeTitle150")]
        public string? EpisodeTitle150 { get; set; }
        /// 
        /// Gets or sets the list of metadata.
        /// 
        [JsonPropertyName("metadata")]
        public IReadOnlyList Metadata { get; set; } = Array.Empty();
        /// 
        /// Gets or sets the list of content raitings.
        /// 
        [JsonPropertyName("contentRating")]
        public IReadOnlyList ContentRating { get; set; } = Array.Empty();
        /// 
        /// Gets or sets the list of cast.
        /// 
        [JsonPropertyName("cast")]
        public IReadOnlyList Cast { get; set; } = Array.Empty();
        /// 
        /// Gets or sets the list of crew.
        /// 
        [JsonPropertyName("crew")]
        public IReadOnlyList Crew { get; set; } = Array.Empty();
        /// 
        /// Gets or sets the entity type.
        /// 
        [JsonPropertyName("entityType")]
        public string? EntityType { get; set; }
        /// 
        /// Gets or sets the show type.
        /// 
        [JsonPropertyName("showType")]
        public string? ShowType { get; set; }
        /// 
        /// Gets or sets a value indicating whether there is image artwork.
        /// 
        [JsonPropertyName("hasImageArtwork")]
        public bool HasImageArtwork { get; set; }
        /// 
        /// Gets or sets the primary image.
        /// 
        [JsonPropertyName("primaryImage")]
        public string? PrimaryImage { get; set; }
        /// 
        /// Gets or sets the thumb image.
        /// 
        [JsonPropertyName("thumbImage")]
        public string? ThumbImage { get; set; }
        /// 
        /// Gets or sets the backdrop image.
        /// 
        [JsonPropertyName("backdropImage")]
        public string? BackdropImage { get; set; }
        /// 
        /// Gets or sets the banner image.
        /// 
        [JsonPropertyName("bannerImage")]
        public string? BannerImage { get; set; }
        /// 
        /// Gets or sets the image id.
        /// 
        [JsonPropertyName("imageID")]
        public string? ImageId { get; set; }
        /// 
        /// Gets or sets the md5.
        /// 
        [JsonPropertyName("md5")]
        public string? Md5 { get; set; }
        /// 
        /// Gets or sets the list of content advisory.
        /// 
        [JsonPropertyName("contentAdvisory")]
        public IReadOnlyList ContentAdvisory { get; set; } = Array.Empty();
        /// 
        /// Gets or sets the movie object.
        /// 
        [JsonPropertyName("movie")]
        public MovieDto? Movie { get; set; }
        /// 
        /// Gets or sets the list of recommendations.
        /// 
        [JsonPropertyName("recommendations")]
        public IReadOnlyList Recommendations { get; set; } = Array.Empty();
    }
}