#ifndef BSP_Q7S_BOARDTEST_Q7STESTTASK_H_
#define BSP_Q7S_BOARDTEST_Q7STESTTASK_H_

#include <libgpsmm.h>

#include "test/testtasks/TestTask.h"

class CoreController;

class Q7STestTask : public TestTask {
 public:
  Q7STestTask(object_id_t objectId);

  ReturnValue_t initialize() override;

 private:
  bool doTestSdCard = false;
  bool doTestScratchApi = false;
  static constexpr bool DO_TEST_GOMSPACE_API = false;
  static constexpr bool DO_TEST_GOMSPACE_GET_CONFIG = false;
  static constexpr bool DO_TEST_FS_HANDLER = false;
  bool doTestGpsShm = false;
  bool doTestGpsSocket = false;
  bool doTestProtHandler = false;
  bool doTestXadc = false;

  bool gpsNotOpenSwitch = false;
  bool gpsReadFailedSwitch = false;
  int32_t noModeSetCntr = 0;
  gpsmm* gpsmmShmPtr = nullptr;

  CoreController* coreController = nullptr;
  ReturnValue_t performOneShotAction() override;
  ReturnValue_t performPeriodicAction() override;

  void testGpsDaemonShm();
  void testGpsDaemonSocket();

  void testSdCard();
  void fileTests();
  void xadcTest();

  void testScratchApi();
  void testJsonLibDirect();
  void testDummyParams();
  void testProtHandler();

  enum FsOpCodes {
    CREATE_EMPTY_FILE_IN_TMP,
    REMOVE_TMP_FILE,
    CREATE_DIR_IN_TMP,
    REMOVE_EMPTY_DIR_IN_TMP,
    ATTEMPT_DIR_REMOVAL_NON_EMPTY,
    REMOVE_FILLED_DIR_IN_TMP,
    RENAME_FILE,
    APPEND_TO_FILE,
  };
  void testFileSystemHandlerDirect(FsOpCodes opCode);
};

#endif /* BSP_Q7S_BOARDTEST_Q7STESTTASK_H_ */