using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Jellyfin.Plugin.JRay.Configuration;
namespace Jellyfin.Plugin.JRay.Services.Interfaces;
///
/// Fetches actor-timeline manifests from the configured public servers.
///
///
/// Satisfies JRay-public-server UR-007: the plugin queries a configurable,
/// ordered list of servers, and the first result clearing the configured
/// match tier wins.
///
// TRACES: JR-025 | PR-006
public interface IManifestExchangeClient
{
///
/// Fetches a movie manifest from the first server that has an acceptable one.
///
/// The configured servers, in trust order.
/// The lowest cut-match tier that may be stored.
/// Identity and cut parameters for the local item.
/// Cancellation token.
/// The accepted manifest, or null when no server had one.
Task FetchMovieAsync(
IReadOnlyList servers,
MatchTier minimumTier,
TitleQuery query,
CancellationToken cancellationToken);
///
/// Fetches a single episode manifest.
///
/// The configured servers, in trust order.
/// The lowest cut-match tier that may be stored.
/// Identity and cut parameters for the local item.
/// Cancellation token.
/// The accepted manifest, or null when no server had one.
Task FetchEpisodeAsync(
IReadOnlyList servers,
MatchTier minimumTier,
TitleQuery query,
CancellationToken cancellationToken);
///
/// Per-server reachability and last error, for the configuration page.
///
/// The configured servers.
/// One status entry per configured server.
IReadOnlyList GetStatus(IReadOnlyList servers);
}