using MediaBrowser.Model.Entities;
using System;
using MediaBrowser.Model.Querying;
namespace MediaBrowser.Model.LiveTv
{
    /// 
    /// Class ProgramQuery.
    /// 
    public class ProgramQuery
    {
        public ProgramQuery()
        {
            ChannelIds = new string[] { };
            SortBy = new string[] { };
            Genres = new string[] { };
        }
        /// 
        /// Fields to return within the items, in addition to basic information
        /// 
        /// The fields.
        public ItemFields[] Fields { get; set; }
        public bool? EnableImages { get; set; }
        public int? ImageTypeLimit { get; set; }
        public ImageType[] EnableImageTypes { get; set; }
        
        /// 
        /// Gets or sets the channel ids.
        /// 
        /// The channel ids.
        public string[] ChannelIds { get; set; }
        /// 
        /// Gets or sets the user identifier.
        /// 
        /// The user identifier.
        public string UserId { get; set; }
        /// 
        /// The earliest date for which a program starts to return
        /// 
        public DateTime? MinStartDate { get; set; }
        /// 
        /// The latest date for which a program starts to return
        /// 
        public DateTime? MaxStartDate { get; set; }
        /// 
        /// The earliest date for which a program ends to return
        /// 
        public DateTime? MinEndDate { get; set; }
        /// 
        /// The latest date for which a program ends to return
        /// 
        public DateTime? MaxEndDate { get; set; }
        /// 
        /// Used to specific whether to return movies or not
        /// 
        /// If set to null, all programs will be returned
        public bool? IsMovie { get; set; }
        /// 
        /// Gets or sets a value indicating whether this instance is kids.
        /// 
        /// null if [is kids] contains no value, true if [is kids]; otherwise, false.
        public bool? IsKids { get; set; }
        /// 
        /// Gets or sets a value indicating whether this instance is sports.
        /// 
        /// null if [is sports] contains no value, true if [is sports]; otherwise, false.
        public bool? IsSports { get; set; }
        
        /// 
        /// Skips over a given number of items within the results. Use for paging.
        /// 
        public int? StartIndex { get; set; }
        /// 
        /// Gets or sets a value indicating whether this instance has aired.
        /// 
        /// null if [has aired] contains no value, true if [has aired]; otherwise, false.
        public bool? HasAired { get; set; }
        /// 
        /// The maximum number of items to return
        /// 
        public int? Limit { get; set; }
        /// 
        /// What to sort the results by
        /// 
        /// The sort by.
        public string[] SortBy { get; set; }
        /// 
        /// The sort order to return results with
        /// 
        /// The sort order.
        public SortOrder? SortOrder { get; set; }
        /// 
        /// Limit results to items containing specific genres
        /// 
        /// The genres.
        public string[] Genres { get; set; }
    }
}