// Relais.h

#ifndef _RELAIS_h
#define _RELAIS_h

#include "Arduino.h"
#include <functional>

enum class RelaisState : bool {
  off = false,
  on = true
};

// Event-Handler. Ereignis: Zustand wurde geändert
// state: neuer Zustand
typedef std::function<void(RelaisState state)> RelaisStateChangedHandlerFunction;

class RelaisClass {
public:
  RelaisClass(uint8_t pin) :_Pin(pin) {};
  void begin(RelaisState state);         // Übernimmt die Kontrolle über den Pin und schaltet das Relais gemäß Parameter 'state'.
  void setState(RelaisState state);      // Schaltet das Relais gemäß Parameter 'state'
  RelaisState getState() { return _State; }
  bool isOn() { return _State == RelaisState::on; }
  void onRelaisStateChanged(RelaisStateChangedHandlerFunction f) { RelaisStateChangedCallback = f; }

protected:
  RelaisState _State = RelaisState::on; // Das Relais wird erst durch begin() gesetzt. 
  uint8_t _Pin;
  RelaisStateChangedHandlerFunction RelaisStateChangedCallback = NULL;
};

extern RelaisClass Relais;

#endif

