using FileShare_Common.Core;
namespace FileShare_Services.Services.FileLibrary
{
///
/// 文件库核心业务服务接口,提供磁盘枚举、目录管理、文件扫描与检索功能。
///
public interface IFileLibraryService
{
///
/// 获取服务器所有磁盘驱动器信息。
///
/// 取消令牌。
/// 驱动器信息列表。
Task> GetDrivesAsync(CancellationToken cancellationToken = default);
///
/// 获取指定路径下的子目录列表。
///
/// 父目录路径,为空时返回根目录。
/// 取消令牌。
/// 子目录信息列表。
Task> GetDirectoriesAsync(string? path, CancellationToken cancellationToken = default);
///
/// 获取所有已注册的文件库根目录及其文件数量。
///
/// 取消令牌。
/// 文件库根目录列表。
Task> GetRootsAsync(CancellationToken cancellationToken = default);
///
/// 添加新的文件库根目录,如已存在则激活并重新扫描。
///
/// 包含路径、显示名称和扫描间隔的请求。
/// 取消令牌。
/// 新添加或已存在的根目录信息。
Task AddRootAsync(AddLibraryRootRequest request, CancellationToken cancellationToken = default);
///
/// 启用或禁用指定的文件库根目录。
///
/// 包含根目录 ID 和目标启用状态的请求。
/// 取消令牌。
/// 更新后的根目录信息。
Task SetRootEnabledAsync(UpdateLibraryRootRequest request, CancellationToken cancellationToken = default);
///
/// 删除指定的文件库根目录。
///
/// 包含根目录 ID 的请求。
/// 取消令牌。
Task DeleteRootAsync(DeleteLibraryRootRequest request, CancellationToken cancellationToken = default);
///
/// 立即扫描指定根目录,枚举所有支持的媒体文件并更新数据库。
///
/// 根目录 ID。
/// 取消令牌。
/// 扫描后的根目录信息。
Task ScanRootAsync(int rootId, CancellationToken cancellationToken = default);
///
/// 扫描所有已到期(距上次扫描超过间隔时间)的根目录。
///
/// 取消令牌。
Task ScanDueRootsAsync(CancellationToken cancellationToken = default);
///
/// 分页搜索已扫描的文件记录,支持按媒体类型、关键词和根目录过滤。
///
/// 包含分页和过滤条件的请求。
/// 取消令牌。
/// 分页文件记录响应。
Task> SearchFilesAsync(SearchFilesRequest request, CancellationToken cancellationToken = default);
///
/// 根据 ID 获取单个文件的记录信息。
///
/// 文件记录 ID。
/// 取消令牌。
/// 文件记录 DTO,不存在时返回 null。
Task GetFileAsync(int id, CancellationToken cancellationToken = default);
///
/// 获取文本文件的预览内容(最多 1 MB)。
///
/// 文件记录 ID。
/// 取消令牌。
/// 文本预览 DTO,文件不存在或非文本类型时返回 null。
Task GetTextPreviewAsync(int id, CancellationToken cancellationToken = default);
///
/// 浏览指定根目录下的目录结构和文件列表。
///
/// 包含根目录 ID 和路径的请求。
/// 取消令牌。
/// 目录浏览响应,包含子目录和文件列表。
Task BrowseDirectoryAsync(BrowseDirectoryRequest request, CancellationToken cancellationToken = default);
///
/// 获取最近添加或最近播放的文件列表。
///
/// 筛选类型,"added" 按创建时间排序,"played" 按最近播放时间排序。
/// 返回数量,范围 1-48,默认 12。
/// 取消令牌。
/// 文件记录 DTO 列表。
Task> GetRecentFilesAsync(string type, int count = 12, CancellationToken cancellationToken = default);
///
/// 将指定文件的最近播放时间更新为当前 UTC 时间。
///
/// 文件记录 ID。
/// 取消令牌。
Task MarkFilePlayedAsync(int id, CancellationToken cancellationToken = default);
///
/// 保存文件的播放进度位置。
///
/// 文件记录 ID。
/// 播放位置(秒)。
/// 取消令牌。
Task SaveFileProgressAsync(int id, double position, CancellationToken cancellationToken = default);
}
}