#ifndef MISSION_CFDP_CFDPUSER_H_
#define MISSION_CFDP_CFDPUSER_H_

#include <fsfw/cfdp/handler/ReservedMessageParser.h>
#include <fsfw/cfdp/handler/UserBase.h>

namespace cfdp {

class EiveUserHandler : public cfdp::UserBase {
 public:
  explicit EiveUserHandler(HasFileSystemIF& vfs, StorageManagerIF& ipcStore,
                           MessageQueueId_t cfdpRequestId);

  virtual ~EiveUserHandler();

  void transactionIndication(const cfdp::TransactionId& id) override;
  void eofSentIndication(const cfdp::TransactionId& id) override;
  void transactionFinishedIndication(const cfdp::TransactionFinishedParams& params) override;
  void metadataRecvdIndication(const cfdp::MetadataRecvdParams& params) override;
  void fileSegmentRecvdIndication(const cfdp::FileSegmentRecvdParams& params) override;
  void reportIndication(const cfdp::TransactionId& id, cfdp::StatusReportIF& report) override;
  void suspendedIndication(const cfdp::TransactionId& id, cfdp::ConditionCode code);
  void resumedIndication(const cfdp::TransactionId& id, size_t progress) override;
  void faultIndication(const cfdp::TransactionId& id, cfdp::ConditionCode code,
                       size_t progress) override;
  void abandonedIndication(const cfdp::TransactionId& id, cfdp::ConditionCode code,
                           size_t progress) override;
  void eofRecvIndication(const cfdp::TransactionId& id) override;

 private:
  MessageQueueIF* userQueue;
  ReservedMessageParser* reservedMsgParser;
};

}  // namespace cfdp

#endif /* MISSION_CFDP_CFDPUSER_H_ */