#ifndef FSFW_POWER_POWERSWITCHER_H_
#define FSFW_POWER_POWERSWITCHER_H_

#include "PowerSwitchIF.h"

#include "../objectmanager/SystemObjectIF.h"
#include "../returnvalues/HasReturnvaluesIF.h"
#include "../timemanager/Countdown.h"

class PowerSwitcher: public HasReturnvaluesIF {
public:
	enum State_t {
		WAIT_OFF,
		WAIT_ON,
		SWITCH_IS_OFF,
		SWITCH_IS_ON,
	};
	State_t state;
	static const uint8_t INTERFACE_ID = CLASS_ID::POWER_SWITCHER;
	static const ReturnValue_t IN_POWER_TRANSITION = MAKE_RETURN_CODE(1);
	static const ReturnValue_t SWITCH_STATE_MISMATCH = MAKE_RETURN_CODE(2);
	PowerSwitcher( uint8_t setSwitch1, uint8_t setSwitch2 = NO_SWITCH,
	        State_t setStartState = SWITCH_IS_OFF );
	ReturnValue_t initialize(object_id_t powerSwitchId);
	void turnOn();
	void turnOff();
	void doStateMachine();
	State_t getState();
	ReturnValue_t checkSwitchState();
	uint32_t getSwitchDelay();
	uint8_t getFirstSwitch() const;
	uint8_t getSecondSwitch() const;
private:
	uint8_t firstSwitch;
	uint8_t secondSwitch;
	PowerSwitchIF* power = nullptr;

	static const uint8_t NO_SWITCH = 0xFF;
	enum SwitchReturn_t {
		ONE_SWITCH = 1,
		TWO_SWITCHES = 2
	};
	ReturnValue_t getStateOfSwitches();
	void commandSwitches( ReturnValue_t onOff );
	SwitchReturn_t howManySwitches();
};



#endif /* FSFW_POWER_POWERSWITCHER_H_ */