#ifndef FSFW_PARAMETERS_PARAMETERHELPER_H_
#define FSFW_PARAMETERS_PARAMETERHELPER_H_

#include "ParameterMessage.h"
#include "ReceivesParameterMessagesIF.h"
#include "../ipc/MessageQueueIF.h"

/**
 * @brief	Helper class to handle parameter messages.
 * @details
 * This class simplfies handling of parameter messages, which are sent
 * to a class which implements ReceivesParameterMessagesIF.
 */
class ParameterHelper {
public:
	ParameterHelper(ReceivesParameterMessagesIF *owner);
	virtual ~ParameterHelper();

	ReturnValue_t handleParameterMessage(CommandMessage *message);

	ReturnValue_t initialize();
private:
	ReceivesParameterMessagesIF *owner;

	MessageQueueId_t ownerQueueId = MessageQueueIF::NO_QUEUE;

	StorageManagerIF *storage = nullptr;

	ReturnValue_t sendParameter(MessageQueueId_t to, uint32_t id,
			const ParameterWrapper *description);

	void rejectCommand(MessageQueueId_t to, ReturnValue_t reason,
			Command_t initialCommand);
};

#endif /* FSFW_PARAMETERS_PARAMETERHELPER_H_ */