using Cleanuparr.Domain.Entities;
using Cleanuparr.Persistence.Models.Configuration.DownloadCleaner;
namespace Cleanuparr.Infrastructure.Features.DownloadClient;
///
/// Download clients whose files can be checked for hardlinks, so unlinked downloads can be moved to a target category.
/// Implemented by the torrent clients only; the *arrs move (never hardlink) usenet downloads on import.
///
public interface IUnlinkedCapable : IDownloadService
{
///
/// Filters downloads that should have their category changed.
///
/// The downloads to filter.
/// The unlinked config for this download client.
/// A list of downloads for the provided categories.
List? FilterDownloadsToChangeCategoryAsync(List? downloads, UnlinkedConfig unlinkedConfig);
///
/// Changes the category for downloads that have no hardlinks.
///
/// The downloads to change.
/// The unlinked config for this download client.
Task ChangeCategoryForNoHardLinksAsync(List? downloads, UnlinkedConfig unlinkedConfig);
///
/// Moves a single torrent to the target category, or adds it as a tag/label when is set.
///
/// The torrent to move.
/// The target category/tag.
/// When true, add a tag/label instead of changing the category (qBittorrent and Transmission).
Task ChangeTorrentCategoryAsync(ITorrentItemWrapper torrent, string targetCategory, bool useTag);
///
/// Creates a category.
///
/// The category name.
Task CreateCategoryAsync(string name);
}