#ifndef MISSION_SYSTEM_COMSUBSYSTEM_H_
#define MISSION_SYSTEM_COMSUBSYSTEM_H_

#include <fsfw/parameters/HasParametersIF.h>
#include <fsfw/parameters/ParameterHelper.h>
#include <fsfw/subsystem/Subsystem.h>

#include "mission/comDefs.h"

class ComSubsystem : public Subsystem, public ReceivesParameterMessagesIF {
 public:
  ComSubsystem(object_id_t setObjectId, uint32_t maxNumberOfSequences, uint32_t maxNumberOfTables);
  virtual ~ComSubsystem() = default;

  MessageQueueId_t getCommandQueue() const override;
  ReturnValue_t getParameter(uint8_t domainId, uint8_t uniqueIdentifier,
                             ParameterWrapper *parameterWrapper, const ParameterWrapper *newValues,
                             uint16_t startAtIndex) override;

 private:
  ReturnValue_t handleCommandMessage(CommandMessage *message) override;

  ReturnValue_t initialize() override;

  uint8_t datarateCfg = static_cast<uint8_t>(com::Datarate::LOW_RATE_MODULATION_BPSK);
  ParameterHelper paramHelper;
};

#endif /* MISSION_SYSTEM_COMSUBSYSTEM_H_ */