using System;
using System.Collections.Generic;
using System.ComponentModel;
using Torch.API.Managers;
using VRage.Game;
namespace Torch.API.Session
{
///
/// Creates a manager for the given session if applicable.
///
///
/// This is for creating managers that will live inside the session, not the manager that controls sesssions.
///
/// The session to construct a bound manager for
/// The manager that will live in the session, or null if none.
public delegate IManager SessionManagerFactoryDel(ITorchSession session);
///
/// Manages the creation and destruction of instances for each created by Space Engineers.
///
public interface ITorchSessionManager : IManager
{
///
/// The currently running session
///
ITorchSession CurrentSession { get; }
///
/// Raised when any changes.
///
event TorchSessionStateChangedDel SessionStateChanged;
///
/// Adds the given factory as a supplier for session based managers
///
/// Session based manager supplier
/// true if added, false if already present
/// If the factory is null
bool AddFactory(SessionManagerFactoryDel factory);
///
/// Remove the given factory from the suppliers for session based managers
///
/// Session based manager supplier
/// true if removed, false if not present
/// If the factory is null
bool RemoveFactory(SessionManagerFactoryDel factory);
///
/// Add a mod to be injected into client's world download.
///
///
///
bool AddOverrideMod(ulong modId);
///
/// Removes a mod from the injected mod list.
///
///
///
bool RemoveOverrideMod(ulong modId);
///
/// List over mods that will be injected into client world downloads.
///
IReadOnlyCollection OverrideMods { get; }
///
/// Event raised when injected mod list changes.
///
event Action OverrideModsChanged;
}
}