using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Torch.API.Managers
{
///
/// Manages a set of and the dependencies between them.
///
public interface IDependencyManager : IDependencyProvider
{
///
/// Registers the given manager into the dependency system.
///
///
/// This method only returns false when there is already a manager registered with a type derived from this given manager,
/// or when the given manager is derived from an already existing manager.
///
/// Manager to register
/// When adding a new manager to an initialized dependency manager
/// true if added, false if not
bool AddManager(IManager manager);
///
/// Clears all managers registered with this dependency manager
///
/// When removing managers from an initialized dependency manager
void ClearManagers();
///
/// Removes a single manager from this dependency manager.
///
/// The manager to remove
/// true if successful, false if the manager wasn't found
/// When removing managers from an initialized dependency manager
bool RemoveManager(IManager manager);
///
/// Initializes the dependency manager, and all its registered managers.
///
void Init();
///
/// Disposes the dependency manager, and all its registered managers.
///
void Dispose();
///
/// The order that managers should be loaded in. (Dependencies, then dependents)
///
/// When trying to determine load order before this dependency manager is initialized
IEnumerable LoadOrder { get; }
///
/// The order that managers should be unloaded in. (Dependents, then dependencies)
///
/// When trying to determine unload order before this dependency manager is initialized
IEnumerable UnloadOrder { get; }
}
}