#ifndef FSFW_TCDISTRIBUTION_CCSDSDISTRIBUTORIF_H_
#define FSFW_TCDISTRIBUTION_CCSDSDISTRIBUTORIF_H_

#include "../tmtcservices/AcceptsTelecommandsIF.h"
#include "../ipc/MessageQueueSenderIF.h"
/**
 * This is the Interface to a CCSDS Distributor.
 * On a CCSDS Distributor, Applications (in terms of CCSDS) may register
 * themselves, either by passing a pointer to themselves (and implementing the
 * CCSDSApplicationIF),  or by explicitly passing an APID and a MessageQueueId
 * to route the TC's to.
 * @ingroup tc_distribution
 */
class CCSDSDistributorIF {
public:
	/**
	 * With this call, a class implementing the CCSDSApplicationIF can register
	 * at the distributor.
	 * @param application A pointer to the Application to register.
	 * @return	- @c RETURN_OK on success,
	 * 			- @c RETURN_FAILED on failure.
	 */
	virtual ReturnValue_t registerApplication(
	        AcceptsTelecommandsIF* application) = 0;
	/**
	 * With this call, other Applications can register to the CCSDS distributor.
	 * This is done by passing an APID and a MessageQueueId to the method.
	 * @param apid	The APID to register.
	 * @param id	The MessageQueueId of the message queue to send the
	 *              TC Packets to.
	 * @return	- @c RETURN_OK on success,
	 * 			- @c RETURN_FAILED on failure.
	 */
	virtual ReturnValue_t registerApplication( uint16_t apid,
	        MessageQueueId_t id) = 0;
	/**
	 * The empty virtual destructor.
	 */
	virtual ~CCSDSDistributorIF() {
	}
};


#endif /* FSFW_TCDISTRIBUTION_CCSDSDISTRIBUTORIF_H_ */