#ifndef TEST_TESTTASK_H_
#define TEST_TESTTASK_H_

#include <fsfw/serialize/SerialBufferAdapter.h>
#include <fsfw/serialize/SerialLinkedListAdapter.h>
#include <fsfw/serialize/SerializeElement.h>

#include <cstddef>

#include "fsfw_tests/integration/task/TestTask.h"

/**
 * @brief 	Test class for general C++ testing.
 * @details
 * Should not be used for board specific
 * tests. Instead, a derived board test class should be used.
 */
class EiveTestTask : public TestTask {
 public:
  EiveTestTask(object_id_t objectId);
  virtual ~EiveTestTask();
  virtual ReturnValue_t performOperation(uint8_t operationCode = 0) override;

 protected:
  virtual ReturnValue_t performOneShotAction();
  virtual ReturnValue_t performPeriodicAction();
  virtual ReturnValue_t performActionA();
  virtual ReturnValue_t performActionB();

  enum testModes : uint8_t { A, B };

  testModes testMode;

  bool testFlag = false;
  uint8_t counter{1};
  uint8_t counterTrigger{3};

  void performPusInjectorTest();
  void examplePacketTest();

 private:
  // Actually, to be really thread-safe, a mutex should be used as well
  // Let's keep it simple for now.
  bool oneShotAction = true;
  StorageManagerIF* IPCStore;

  void performLwgpsTest();
};

#endif /* TESTTASK_H_ */