/* Blinker
   Copyright 2011-2019 Stefan Schuermans <stefan@blinkenarea.org>
   Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html
   a blinkenarea.org project */

#ifndef BLINKER_MODULE_H
#define BLINKER_MODULE_H

#include <string>

#include "Mgrs.h"
#include "Directory.h"

namespace Blinker {

/// base class for modules
class Module
{
public:
  /**
   * @brief constructor
   * @param[in] name module name
   * @param[in] name module name
   * @param[in] mgrs managers
   * @param[in] dirBase base directory
   */
  Module(const std::string &name, Mgrs &mgrs, const Directory &dirBase);

  /// virtual destructor
  virtual ~Module();

private:
  /// copy constructor disabled
  Module(const Module &that);

  /// assignment operator disabled
  const Module & operator=(const Module &that);

public:
  /// check for update of configuration
  virtual void updateConfig() = 0;

protected:
  std::string m_name;    ///< module name
  Mgrs        &m_mgrs;   ///< managers
  Directory   m_dirBase; ///< base directory
}; // class Module

} // namespace Blinker

#endif // #ifndef BLINKER_MODULE_H

