#ifndef ECSS_SERVICES_REQUESTVERIFICATIONSERVICE_HPP
#define ECSS_SERVICES_REQUESTVERIFICATIONSERVICE_HPP

#include "Service.hpp"

/**
 * Implementation of the ST[01] request verification service
 *
 * Note:For the time being the cause(routing, acceptance, execution), that functions of ST[01]
 * should be called, hasn't been implemented yet. In main.cpp there are some random calls with
 * dummy values.
 *
 * @todo All telemetry packets shall have a telemetry packet secondary header
 * @todo See if the deduced data defined from the standard should still be ignored. This deduced
 * data exists only in reports that send failure signs(for example the TM[1,2])
 */
class RequestVerificationService : public Service {
public:
	RequestVerificationService() {
		serviceType = 1;
	}

	/**
	 * TM[1,1] successful acceptance verification report
	 *
	 * Take a Message& reference as argument, that contains the necessary data to send the report.
	 * The data field(data[]) of this contains the basic info of the telecommand packet  that
	 * accepted successfully and the format is defined from the standard
	 *
	 * @todo The values of the data types that the data field(data[]) is consisted have
	 * determined limits so when the assign will happen should be treated with attention
	 */
	void successAcceptanceVerification(Message &request);

	/**
	 * TM[1,2] failed acceptance verification report
	 *
	 * Take a Message& reference as argument, that contains the necessary data to send the report.
	 * The data field(data[]) of this contains the basic info of the telecommand packet that fail
	 * to be accepted and the format is defined from the standard
	 *
	 * @todo The values of the data types that the data field(data[]) is consisted have
	 * determined limits so when the declaration will happen should be treated with attention
	 */
	void failAcceptanceVerification(Message &request);


	/**
 	 * TM[1,7] successful completion of execution verification report
	 *
	 * Take a Message& reference as argument, that contains the necessary data to send the report.
	 * The data field(data[]) of this contains the basic info of the telecommand packet that
	 * executed successfully and the format is defined from the standard
	 *
	 * @todo The values of the data types that the data field(data[]) is consisted have
	 * determined limits so when the declaration will happen should be treated with attention
 	 */
	void successExecutionVerification(Message &request);

	/**
	 * TM[1,8] failed completion of execution verification report
	 *
	 * Take a Message& reference as argument, that contains the necessary data to send the report.
	 * The data field(data[]) of this contains the basic info of the telecommand packet that fail
	 * to be executed and the format is defined from the standard
	 */
	void failExecutionVerification(Message &request);

	/**
	 * TM[1,10] failed routing verification report
	 *
	 * Take a Message& reference as argument, that contains the necessary data to send the report.
	 * The data field(data[]) of this contains the basic info of the telecommand packet that fail
	 * the routing and the format is defined from the standard
	 *
	 * @todo The values of the data types that the data field(data[]) is consisted have
	 * determined limits so when the declaration will happen should be treated with attention
 	 */
	void failRoutingVerification(Message &request);


};

#endif //ECSS_SERVICES_REQUESTVERIFICATIONSERVICE_HPP