using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text.Json.Serialization;
using Jellyfin.Data.Enums;
using Jellyfin.Database.Implementations.Enums;
using Jellyfin.Extensions.Json.Converters;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Querying;
namespace Jellyfin.Api.Models.LiveTvDtos;
/// 
/// Get programs dto.
/// 
public class GetProgramsDto
{
    /// 
    /// Gets or sets the channels to return guide information for.
    /// 
    [JsonConverter(typeof(JsonCommaDelimitedCollectionConverterFactory))]
    public IReadOnlyList? ChannelIds { get; set; }
    /// 
    /// Gets or sets optional. Filter by user id.
    /// 
    public Guid? UserId { get; set; }
    /// 
    /// Gets or sets the minimum premiere start date.
    /// 
    public DateTime? MinStartDate { get; set; }
    /// 
    /// Gets or sets filter by programs that have completed airing, or not.
    /// 
    public bool? HasAired { get; set; }
    /// 
    /// Gets or sets filter by programs that are currently airing, or not.
    /// 
    public bool? IsAiring { get; set; }
    /// 
    /// Gets or sets the maximum premiere start date.
    /// 
    public DateTime? MaxStartDate { get; set; }
    /// 
    /// Gets or sets the minimum premiere end date.
    /// 
    public DateTime? MinEndDate { get; set; }
    /// 
    /// Gets or sets the maximum premiere end date.
    /// 
    public DateTime? MaxEndDate { get; set; }
    /// 
    /// Gets or sets filter for movies.
    /// 
    public bool? IsMovie { get; set; }
    /// 
    /// Gets or sets filter for series.
    /// 
    public bool? IsSeries { get; set; }
    /// 
    /// Gets or sets filter for news.
    /// 
    public bool? IsNews { get; set; }
    /// 
    /// Gets or sets filter for kids.
    /// 
    public bool? IsKids { get; set; }
    /// 
    /// Gets or sets filter for sports.
    /// 
    public bool? IsSports { get; set; }
    /// 
    /// Gets or sets the record index to start at. All items with a lower index will be dropped from the results.
    /// 
    public int? StartIndex { get; set; }
    /// 
    /// Gets or sets the maximum number of records to return.
    /// 
    public int? Limit { get; set; }
    /// 
    /// Gets or sets specify one or more sort orders, comma delimited. Options: Name, StartDate.
    /// 
    [JsonConverter(typeof(JsonCommaDelimitedCollectionConverterFactory))]
    public IReadOnlyList? SortBy { get; set; }
    /// 
    /// Gets or sets sort order.
    /// 
    [JsonConverter(typeof(JsonCommaDelimitedCollectionConverterFactory))]
    public IReadOnlyList? SortOrder { get; set; }
    /// 
    /// Gets or sets the genres to return guide information for.
    /// 
    [JsonConverter(typeof(JsonPipeDelimitedCollectionConverterFactory))]
    public IReadOnlyList? Genres { get; set; }
    /// 
    /// Gets or sets the genre ids to return guide information for.
    /// 
    [JsonConverter(typeof(JsonCommaDelimitedCollectionConverterFactory))]
    public IReadOnlyList? GenreIds { get; set; }
    /// 
    /// Gets or sets include image information in output.
    /// 
    public bool? EnableImages { get; set; }
    /// 
    /// Gets or sets a value indicating whether retrieve total record count.
    /// 
    [DefaultValue(true)]
    public bool EnableTotalRecordCount { get; set; } = true;
    /// 
    /// Gets or sets the max number of images to return, per image type.
    /// 
    public int? ImageTypeLimit { get; set; }
    /// 
    /// Gets or sets the image types to include in the output.
    /// 
    [JsonConverter(typeof(JsonCommaDelimitedCollectionConverterFactory))]
    public IReadOnlyList? EnableImageTypes { get; set; }
    /// 
    /// Gets or sets include user data.
    /// 
    public bool? EnableUserData { get; set; }
    /// 
    /// Gets or sets filter by series timer id.
    /// 
    public string? SeriesTimerId { get; set; }
    /// 
    /// Gets or sets filter by library series id.
    /// 
    public Guid? LibrarySeriesId { get; set; }
    /// 
    /// Gets or sets specify additional fields of information to return in the output.
    /// 
    [JsonConverter(typeof(JsonCommaDelimitedCollectionConverterFactory))]
    public IReadOnlyList? Fields { get; set; }
}