using MediaBrowser.Model.FileOrganization;
using MediaBrowser.Model.Querying;
using System.Threading;
using System.Threading.Tasks;
namespace MediaBrowser.Controller.FileOrganization
{
    public interface IFileOrganizationService
    {
        /// 
        /// Processes the new files.
        /// 
        void BeginProcessNewFiles();
        /// 
        /// Deletes the original file.
        /// 
        /// The result identifier.
        /// Task.
        Task DeleteOriginalFile(string resultId);
        /// 
        /// Clears the log.
        /// 
        /// Task.
        Task ClearLog();
        
        /// 
        /// Performs the organization.
        /// 
        /// The result identifier.
        /// Task.
        Task PerformOrganization(string resultId);
        /// 
        /// Performs the episode organization.
        /// 
        /// The request.
        /// Task.
        Task PerformEpisodeOrganization(EpisodeFileOrganizationRequest request);
        
        /// 
        /// Gets the results.
        /// 
        /// The query.
        /// IEnumerable{FileOrganizationResult}.
        QueryResult GetResults(FileOrganizationResultQuery query);
        /// 
        /// Gets the result.
        /// 
        /// The identifier.
        /// FileOrganizationResult.
        FileOrganizationResult GetResult(string id);
        /// 
        /// Gets the result by source path.
        /// 
        /// The path.
        /// FileOrganizationResult.
        FileOrganizationResult GetResultBySourcePath(string path);
        
        /// 
        /// Saves the result.
        /// 
        /// The result.
        /// The cancellation token.
        /// Task.
        Task SaveResult(FileOrganizationResult result, CancellationToken cancellationToken);
        /// 
        /// Returns a list of smart match entries
        /// 
        /// The query.
        /// IEnumerable{SmartMatchInfo}.
        QueryResult GetSmartMatchInfos(FileOrganizationResultQuery query);
        /// 
        /// Deletes a smart match entry.
        /// 
        /// Item name.
        /// The match string to delete.
        void DeleteSmartMatchEntry(string ItemName, string matchString);
    }
}