using MediaBrowser.Model.Updates;
using System;
using System.Threading;
using System.Threading.Tasks;
namespace MediaBrowser.Common.Kernel
{
    /// 
    /// An interface to be implemented by the applications hosting a kernel
    /// 
    public interface IApplicationHost
    {
        /// 
        /// Restarts this instance.
        /// 
        void Restart();
        /// 
        /// Reloads the logger.
        /// 
        void ReloadLogger();
        /// 
        /// Gets the log file path.
        /// 
        /// The log file path.
        string LogFilePath { get; }
        /// 
        /// Gets or sets a value indicating whether this instance can self update.
        /// 
        /// true if this instance can self update; otherwise, false.
        bool CanSelfUpdate { get; }
        /// 
        /// Checks for update.
        /// 
        /// Task{CheckForUpdateResult}.
        Task CheckForApplicationUpdate(CancellationToken cancellationToken, IProgress progress);
        /// 
        /// Updates the application.
        /// 
        /// Task.
        Task UpdateApplication(CancellationToken cancellationToken, IProgress progress);
    }
}