#ifndef FSFW_EXAMPLE_COMMON_CFDPTMFUNNEL_H
#define FSFW_EXAMPLE_COMMON_CFDPTMFUNNEL_H

#include <mission/tmtc/TmFunnelBase.h>

#include <vector>

#include "fsfw/objectmanager/SystemObject.h"
#include "fsfw/storagemanager/StorageManagerIF.h"
#include "fsfw/tmtcservices/AcceptsTelemetryIF.h"
#include "fsfw/tmtcservices/TmTcMessage.h"

class CfdpTmFunnel : public TmFunnelBase {
 public:
  CfdpTmFunnel(TmFunnelBase::FunnelCfg cfg, uint16_t cfdpInCcsdsApid);
  [[nodiscard]] const char* getName() const override;
  ReturnValue_t performOperation(uint8_t opCode);
  ReturnValue_t initialize() override;

 private:
  ReturnValue_t handlePacket(TmTcMessage& msg);

  uint16_t sourceSequenceCount = 0;
  uint16_t cfdpInCcsdsApid;
};
#endif  // FSFW_EXAMPLE_COMMON_CFDPTMFUNNEL_H