using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Jellyfin.Database.Implementations.Entities;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Model.Configuration;
namespace MediaBrowser.Controller.Library;
///
/// Interface for managing similar items providers and operations.
///
public interface ISimilarItemsManager
{
///
/// Registers similar items providers discovered through dependency injection.
///
/// The similar items providers to register.
void AddParts(IEnumerable providers);
///
/// Gets the similar items providers for a specific item type.
///
/// The item type.
/// The list of similar items providers for that type.
IReadOnlyList GetSimilarItemsProviders()
where T : BaseItem;
///
/// Gets similar items for the specified item.
///
/// The source item to find similar items for.
/// Artist IDs to exclude from results.
/// The user context.
/// The DTO options.
/// Maximum number of results.
/// The library options for provider configuration.
/// The cancellation token.
/// The list of similar items.
Task> GetSimilarItemsAsync(
BaseItem item,
IReadOnlyList excludeArtistIds,
User? user,
DtoOptions dtoOptions,
int? limit,
LibraryOptions? libraryOptions,
CancellationToken cancellationToken);
}