#ifndef COORDINATETRANSFORMATIONS_H_
#define COORDINATETRANSFORMATIONS_H_

#include "../timemanager/Clock.h"
#include <cstring>

class CoordinateTransformations {
public:
	static void positionEcfToEci(const double* ecfCoordinates, double* eciCoordinates, timeval *timeUTC = NULL);

	static void velocityEcfToEci(const double* ecfVelocity,
			const double* ecfPosition,
			double* eciVelocity, timeval *timeUTC = NULL);

	static void positionEciToEcf(const double* eciCoordinates, double* ecfCoordinates,timeval *timeUTC = NULL);
	static void velocityEciToEcf(const double* eciVelocity,const double* eciPosition, double* ecfVelocity,timeval* timeUTC = NULL);

	static double getEarthRotationAngle(timeval timeUTC);

	static void getEarthRotationMatrix(timeval timeUTC, double matrix[][3]);
private:
	CoordinateTransformations();
	static void ecfToEci(const double* ecfCoordinates, double* eciCoordinates,
			const double* ecfPositionIfCoordinatesAreVelocity, timeval *timeUTCin);
	static void eciToEcf(const double* eciCoordinates,
				double* ecfCoordinates,
				const double* eciPositionIfCoordinatesAreVelocity,timeval *timeUTCin);

	static double getJuleanCenturiesTT(timeval timeUTC);
	static void getTransMatrixECITOECF(timeval time,double Tfi[3][3]);

};

#endif /* COORDINATETRANSFORMATIONS_H_ */