using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using MediaBrowser.Common.Plugins;
using MediaBrowser.Model.Events;
using MediaBrowser.Model.Updates;
using Microsoft.Extensions.DependencyInjection;
namespace MediaBrowser.Common
{
///
/// An interface to be implemented by the applications hosting a kernel
///
public interface IApplicationHost
{
///
/// Gets the name.
///
/// The name.
string Name { get; }
///
/// Gets the device identifier.
///
/// The device identifier.
string SystemId { get; }
///
/// Occurs when [application updated].
///
event EventHandler> ApplicationUpdated;
///
/// Gets or sets a value indicating whether this instance has pending kernel reload.
///
/// true if this instance has pending kernel reload; otherwise, false.
bool HasPendingRestart { get; }
bool IsShuttingDown { get; }
///
/// Gets a value indicating whether this instance can self restart.
///
/// true if this instance can self restart; otherwise, false.
bool CanSelfRestart { get; }
///
/// Occurs when [has pending restart changed].
///
event EventHandler HasPendingRestartChanged;
///
/// Notifies the pending restart.
///
void NotifyPendingRestart();
///
/// Restarts this instance.
///
void Restart();
///
/// Gets the application version.
///
/// The application version.
string ApplicationVersion { get; }
///
/// Gets the application user agent.
///
/// The application user agent.
string ApplicationUserAgent { 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; }
///
/// Gets the exports.
///
///
/// if set to true [manage liftime].
/// IEnumerable{``0}.
IEnumerable GetExports(bool manageLifetime = true);
///
/// Updates the application.
///
/// Task.
Task UpdateApplication(PackageVersionInfo package, CancellationToken cancellationToken, IProgress progress);
///
/// Resolves this instance.
///
///
/// ``0.
T Resolve();
///
/// Shuts down.
///
Task Shutdown();
///
/// Gets the plugins.
///
/// The plugins.
IPlugin[] Plugins { get; }
///
/// Removes the plugin.
///
/// The plugin.
void RemovePlugin(IPlugin plugin);
///
/// Inits this instance.
///
Task Init(IServiceCollection serviceCollection);
///
/// Creates the instance.
///
/// The type.
/// System.Object.
object CreateInstance(Type type);
PackageVersionClass SystemUpdateLevel { get; }
}
}