using System;
using System.IO;
using System.Threading.Tasks;
using MediaBrowser.Controller.SystemBackupService;
namespace Jellyfin.Server.Implementations.SystemBackupService;
/// 
/// Defines an interface to restore and backup the jellyfin system.
/// 
public interface IBackupService
{
    /// 
    /// Creates a new Backup zip file containing the current state of the application.
    /// 
    /// The backup options.
    /// A task.
    Task CreateBackupAsync(BackupOptionsDto backupOptions);
    /// 
    /// Gets a list of backups that are available to be restored from.
    /// 
    /// A list of backup paths.
    Task EnumerateBackups();
    /// 
    /// Gets a single backup manifest if the path defines a valid Jellyfin backup archive.
    /// 
    /// The path to be loaded.
    /// The containing backup manifest or null if not existing or compatiable.
    Task GetBackupManifest(string archivePath);
    /// 
    /// Restores an backup zip file created by jellyfin.
    /// 
    /// Path to the archive.
    /// A Task.
    /// Thrown when an invalid or missing file is specified.
    /// Thrown when attempt to load an unsupported backup is made.
    /// Thrown for errors during the restore.
    Task RestoreBackupAsync(string archivePath);
    /// 
    /// Schedules a Restore and restarts the server.
    /// 
    /// The path to the archive to restore from.
    void ScheduleRestoreAndRestartServer(string archivePath);
}