using Cleanuparr.Domain.Entities.Arr;
using Cleanuparr.Persistence.Models.Configuration.Arr;
namespace Cleanuparr.Infrastructure.Features.Arr.Interfaces;
public interface ISonarrClient : IArrClient
{
///
/// Streams series from a Sonarr instance one item at a time
///
IAsyncEnumerable StreamAllSeriesAsync(ArrInstance arrInstance, CancellationToken cancellationToken = default);
///
/// Fetches all episodes for a specific series from a Sonarr instance
///
Task> GetEpisodesAsync(ArrInstance arrInstance, long seriesId, CancellationToken cancellationToken = default);
///
/// Fetches quality profiles from a Sonarr instance
///
Task> GetQualityProfilesAsync(ArrInstance arrInstance);
///
/// Fetches episode file metadata for a specific series, including quality cutoff status
///
Task> GetEpisodeFilesAsync(ArrInstance arrInstance, long seriesId, CancellationToken cancellationToken = default);
///
/// Fetches custom format scores for episode files in batches
///
Task> GetEpisodeFileScoresAsync(ArrInstance arrInstance, List episodeFileIds);
///
/// Fetches the series/season pairs Sonarr grabbed an episode for since the given time.
///
Task> GetRecentlyGrabbedSeasonsAsync(ArrInstance arrInstance, DateTimeOffset since, CancellationToken cancellationToken = default);
///
/// Fetches every episode Sonarr lists as missing, filtered by monitored state.
///
Task> GetMissingEpisodesAsync(ArrInstance arrInstance, bool monitored, CancellationToken cancellationToken = default);
///
/// Fetches every episode Sonarr lists as a cutoff-unmet upgrade, filtered by monitored state.
///
Task> GetCutoffUnmetEpisodesAsync(ArrInstance arrInstance, bool monitored, CancellationToken cancellationToken = default);
}