using MediaBrowser.Model.Entities;
using MediaBrowser.Controller.Library;
using System;
using System.Collections.Generic;
using System.Linq;
namespace MediaBrowser.Controller.Entities
{
    public abstract class BaseItem : BaseEntity, IHasProviderIds
    {
        /// 
        /// We attach these to the item so that we only ever have to hit the file system once
        /// (this includes the children of the containing folder)
        /// Use ResolveArgs.FileSystemChildren to check for the existence of files instead of File.Exists
        /// 
        public ItemResolveEventArgs ResolveArgs { get; set; }
        public string SortName { get; set; }
        /// 
        /// When the item first debuted. For movies this could be premiere date, episodes would be first aired
        /// 
        public DateTime? PremiereDate { get; set; }
        public string Path { get; set; }
        public Folder Parent { get; set; }
        public string LogoImagePath { get; set; }
        public string ArtImagePath { get; set; }
        public string ThumbnailImagePath { get; set; }
        public string BannerImagePath { get; set; }
        public IEnumerable BackdropImagePaths { get; set; }
        public string OfficialRating { get; set; }
        
        public string CustomRating { get; set; }
        public string CustomPin { get; set; }
        public string Language { get; set; }
        public string Overview { get; set; }
        public List Taglines { get; set; }
        /// 
        /// Using a Dictionary to prevent duplicates
        /// 
        public Dictionary People { get; set; }
        public List Studios { get; set; }
        public List Genres { get; set; }
        public string DisplayMediaType { get; set; }
        public float? UserRating { get; set; }
        public long? RunTimeTicks { get; set; }
        public string AspectRatio { get; set; }
        public int? ProductionYear { get; set; }
        /// 
        /// If the item is part of a series, this is it's number in the series.
        /// This could be episode number, album track number, etc.
        /// 
        public int? IndexNumber { get; set; }
        /// 
        /// For an episode this could be the season number, or for a song this could be the disc number.
        /// 
        public int? ParentIndexNumber { get; set; }
        public IEnumerable