/**
* Copyright © Webd 2018
* License: MIT (https://github.com/DiamondMVC/Webd/blob/master/LICENSE)
* Author: Jacob Jensen (bausshf)
*/
module webd.modules.modulecollection;

import webd.modules.modulepackage;

/// Collection of modules.
private static __gshared ModulePackage[string] _modules;

/**
* Adds a new module to the module collection.
* Params:
*   name =          The name of the module.
*   modulePackage = The module to add.
*/
void addModule(string name, ModulePackage modulePackage)
{
  _modules[name] = modulePackage;
}

/**
* Fires an event for a module.
* Params:
*   moduleName = The name of the module.
*   event =      The event to fire.
*   args =       The arguments to pass to the event handler.
*/
void fireEvent(T)(string moduleName, string event, T args)
{
  auto modulePackage = _modules.get(moduleName, null);

  if (!modulePackage)
  {
    return;
  }

  modulePackage.fireEvent!T(event, args);
}