#ifndef FSFW_PUS_SERVICEPACKETS_SERVICE201PACKETS_H_
#define FSFW_PUS_SERVICEPACKETS_SERVICE201PACKETS_H_

#include "../../serialize/SerialLinkedListAdapter.h"
#include "../../serialize/SerializeIF.h"
#include "../../health/HasHealthIF.h"

class HealthCommand: public SerialLinkedListAdapter<SerializeIF> { //!< [EXPORT] : [SUBSERVICE] 1
public:

	HealthCommand() {
		setLinks();
	}

	HasHealthIF::HealthState getHealth() {
		return static_cast<HasHealthIF::HealthState>(health.entry);
	}
private:
	void setLinks() {
		setStart(&objectId);
		objectId.setNext(&health);
	}
	SerializeElement<uint32_t> objectId; //!< [EXPORT] : [COMMENT] Target object Id
	SerializeElement<uint8_t> health; //!< [EXPORT] : [COMMENT] Health to set
};


class HealthSetReply: public SerialLinkedListAdapter<SerializeIF> { //!< [EXPORT] : [SUBSERVICE] 2
public:
	HealthSetReply(uint8_t health_, uint8_t oldHealth_):
		health(health_), oldHealth(oldHealth_)
	{
		setLinks();
	}

private:
	HealthSetReply(const HealthSetReply &reply);
	void setLinks() {
		setStart(&objectId);
		objectId.setNext(&health);
		health.setNext(&oldHealth);
	}
	SerializeElement<uint32_t> objectId; //!< [EXPORT] : [COMMENT] Source object ID
	SerializeElement<uint8_t> health; //!< [EXPORT] : [COMMENT] New Health
	SerializeElement<uint8_t> oldHealth; //!< [EXPORT] : [COMMENT] Old Health
};

#endif /* FSFW_PUS_SERVICEPACKETS_SERVICE201PACKETS_H_ */