using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Entities;
using System;
namespace MediaBrowser.Model.Querying
{
    /// 
    /// Contains all the possible parameters that can be used to query for items
    /// 
    public class ItemQuery
    {
        /// 
        /// The user to localize search results for
        /// 
        /// The user id.
        public Guid UserId { get; set; }
        /// 
        /// Specify this to localize the search to a specific item or folder. Omit to use the root.
        /// 
        /// The parent id.
        public string ParentId { get; set; }
        /// 
        /// Skips over a given number of items within the results. Use for paging.
        /// 
        /// The start index.
        public int? StartIndex { get; set; }
        /// 
        /// The maximum number of items to return
        /// 
        /// The limit.
        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; }
        /// 
        /// Filters to apply to the results
        /// 
        /// The filters.
        public ItemFilter[] Filters { get; set; }
        /// 
        /// Fields to return within the items, in addition to basic information
        /// 
        /// The fields.
        public ItemFields[] Fields { get; set; }
        /// 
        /// Whether or not to perform the query recursively
        /// 
        /// true if recursive; otherwise, false.
        public bool Recursive { get; set; }
        /// 
        /// Limit results to items containing specific genres
        /// 
        /// The genres.
        public string[] Genres { get; set; }
        /// 
        /// Limit results to items containing specific studios
        /// 
        /// The studios.
        public string[] Studios { get; set; }
        /// 
        /// Gets or sets the exclude item types.
        /// 
        /// The exclude item types.
        public string[] ExcludeItemTypes { get; set; }
        /// 
        /// Gets or sets the include item types.
        /// 
        /// The include item types.
        public string[] IncludeItemTypes { get; set; }
        
        /// 
        /// Limit results to items containing specific years
        /// 
        /// The years.
        public int[] Years { get; set; }
        /// 
        /// Limit results to items containing a specific person
        /// 
        /// The person.
        public string Person { get; set; }
        /// 
        /// If the Person filter is used, this can also be used to restrict to a specific person type
        /// 
        /// The type of the person.
        public string PersonType { get; set; }
        /// 
        /// Search characters used to find items
        /// 
        /// The index by.
        public string SearchTerm { get; set; }
        
        /// 
        /// The dynamic, localized index function name
        /// 
        /// The index by.
        public string IndexBy { get; set; }
        /// 
        /// Gets or sets the image types.
        /// 
        /// The image types.
        public ImageType[] ImageTypes { get; set; }
        /// 
        /// Gets or sets the ids, which are specific items to retrieve
        /// 
        /// The ids.
        public string[] Ids { get; set; }
    }
}