using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Resolvers;
using MediaBrowser.Controller.Sorting;
using MediaBrowser.Model.Entities;
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
namespace MediaBrowser.Controller.Library
{
    /// 
    /// Interface ILibraryManager
    /// 
    public interface ILibraryManager
    {
        /// 
        /// Resolves the item.
        /// 
        /// The args.
        /// BaseItem.
        BaseItem ResolveItem(ItemResolveArgs args);
        /// 
        /// Resolves a path into a BaseItem
        /// 
        /// The file info.
        /// The parent.
        /// BaseItem.
        /// 
        BaseItem ResolvePath(FileSystemInfo fileInfo, Folder parent = null);
        /// 
        /// Resolves a set of files into a list of BaseItem
        /// 
        /// 
        /// The files.
        /// The parent.
        /// List{``0}.
        List ResolvePaths(IEnumerable files, Folder parent)
            where T : BaseItem;
        /// 
        /// Gets the root folder.
        /// 
        /// The root folder.
        AggregateFolder RootFolder { get; }
        /// 
        /// Gets the person sync.
        /// 
        /// The name.
        /// Person.
        Person GetPersonSync(string name);
        /// 
        /// Gets a Person
        /// 
        /// The name.
        /// Task{Person}.
        Person GetPerson(string name);
        /// 
        /// Gets the artist.
        /// 
        /// The name.
        /// Task{Artist}.
        Artist GetArtist(string name);
        /// 
        /// Gets a Studio
        /// 
        /// The name.
        /// Task{Studio}.
        Studio GetStudio(string name);
        /// 
        /// Gets a Genre
        /// 
        /// The name.
        /// Task{Genre}.
        Genre GetGenre(string name);
        /// 
        /// Gets the genre.
        /// 
        /// The name.
        /// Task{MusicGenre}.
        MusicGenre GetMusicGenre(string name);
        /// 
        /// Gets the game genre.
        /// 
        /// The name.
        /// Task{GameGenre}.
        GameGenre GetGameGenre(string name);
        /// 
        /// Gets a Year
        /// 
        /// The value.
        /// Task{Year}.
        /// 
        Year GetYear(int value);
        /// 
        /// Validate and refresh the People sub-set of the IBN.
        /// The items are stored in the db but not loaded into memory until actually requested by an operation.
        /// 
        /// The cancellation token.
        /// The progress.
        /// Task.
        Task ValidatePeople(CancellationToken cancellationToken, IProgress progress);
        /// 
        /// Reloads the root media folder
        /// 
        /// The progress.
        /// The cancellation token.
        /// Task.
        Task ValidateMediaLibrary(IProgress progress, CancellationToken cancellationToken);
        /// 
        /// Gets the default view.
        /// 
        /// IEnumerable{VirtualFolderInfo}.
        IEnumerable GetDefaultVirtualFolders();
        /// 
        /// Gets the view.
        /// 
        /// The user.
        /// IEnumerable{VirtualFolderInfo}.
        IEnumerable GetVirtualFolders(User user);
        /// 
        /// Gets the item by id.
        /// 
        /// The id.
        /// BaseItem.
        BaseItem GetItemById(Guid id);
        /// 
        /// Gets the intros.
        /// 
        /// The item.
        /// The user.
        /// IEnumerable{System.String}.
        IEnumerable