#ifndef MISSION_SYSTEM_POWERSTATEMACHINE_H_
#define MISSION_SYSTEM_POWERSTATEMACHINE_H_

#include <fsfw/modes/HasModesIF.h>
#include <fsfw/power/PowerSwitchIF.h>
#include <fsfw/timemanager/Countdown.h>

#include "definitions.h"

class PowerStateMachineBase {
 public:
  PowerStateMachineBase(PowerSwitchIF* pwrSwitcher, dur_millis_t checkTimeout);

  virtual power::OpCodes fsm() = 0;

  void setCheckTimeout(dur_millis_t timeout);
  void reset();
  void start(Mode_t mode, Submode_t submode);
  bool active();
  power::States getState() const;

 protected:
  power::OpCodes opResult = power::OpCodes::NONE;
  power::States state = power::States::IDLE;
  PowerSwitchIF* pwrSwitcher = nullptr;
  Mode_t targetMode = HasModesIF::MODE_OFF;
  Submode_t targetSubmode = 0;
  Countdown checkTimeout;
};

#endif /* MISSION_SYSTEM_POWERSTATEMACHINE_H_ */