#ifndef MISSION_TMTC_PERSISTENTSINGLETMSTORETASK_H_
#define MISSION_TMTC_PERSISTENTSINGLETMSTORETASK_H_

#include <fsfw/objectmanager/SystemObject.h>
#include <fsfw/tasks/ExecutableObjectIF.h>
#include <mission/com/TmStoreTaskBase.h>
#include <mission/com/VirtualChannel.h>
#include <mission/tmtc/PersistentTmStoreWithTmQueue.h>

class PersistentSingleTmStoreTask : public TmStoreTaskBase, public ExecutableObjectIF {
 public:
  PersistentSingleTmStoreTask(object_id_t objectId, StorageManagerIF& ipcStore,
                              PersistentTmStoreWithTmQueue& storeWithQueue, VirtualChannel& channel,
                              Event eventIfDumpDone, Event eventIfCancelled,
                              SdCardMountedIF& sdcMan, const std::atomic_bool& ptmeLocked);

  ReturnValue_t performOperation(uint8_t opCode) override;

 private:
  PersistentTmStoreWithTmQueue& storeWithQueue;
  DumpContext dumpContext;
  Countdown tcHandlingCd = Countdown(400);
  Countdown graceDelayDuringDumping = Countdown(100);

  bool initStoresIfPossible() override;

  void startTransition(Mode_t mode, Submode_t submode) override;
};

#endif /* MISSION_TMTC_PERSISTENTSINGLETMSTORETASK_H_ */