#pragma warning disable CS1591
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Jellyfin.Data.Entities;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Movies;
namespace MediaBrowser.Controller.Collections
{
    public interface ICollectionManager
    {
        /// 
        /// Occurs when [collection created].
        /// 
        event EventHandler? CollectionCreated;
        /// 
        /// Occurs when [items added to collection].
        /// 
        event EventHandler? ItemsAddedToCollection;
        /// 
        /// Occurs when [items removed from collection].
        /// 
        event EventHandler? ItemsRemovedFromCollection;
        /// 
        /// Creates the collection.
        /// 
        /// The options.
        /// BoxSet wrapped in an awaitable task.
        Task CreateCollectionAsync(CollectionCreationOptions options);
        /// 
        /// Adds to collection.
        /// 
        /// The collection identifier.
        /// The item ids.
        ///  representing the asynchronous operation.
        Task AddToCollectionAsync(Guid collectionId, IEnumerable itemIds);
        /// 
        /// Removes from collection.
        /// 
        /// The collection identifier.
        /// The item ids.
        /// A  representing the asynchronous operation.
        Task RemoveFromCollectionAsync(Guid collectionId, IEnumerable itemIds);
        /// 
        /// Collapses the items within box sets.
        /// 
        /// The items.
        /// The user.
        /// IEnumerable{BaseItem}.
        IEnumerable CollapseItemsWithinBoxSets(IEnumerable items, User user);
        /// 
        /// Gets the folder where collections are stored.
        /// 
        /// Will create the collection folder on the storage if set to true.
        /// The folder instance referencing the collection storage.
        Task GetCollectionsFolder(bool createIfNeeded);
    }
}