/***************************************************************************
*                                                                          *
*  Copyright (C) Golaem S.A.  All Rights Reserved.                         *
*                                                                          *
****************************************************************************/

#pragma once

#include "glmCoreAPI.h"

namespace glm
{
	class EulerAngles;
	class Quaternion;
	class Vector3;

	struct EulerPolesStatus
	{
		enum Value
		{
			NONE,
			NORTH,
			SOUTH,
			END
		};
	};

	GLM_CORE_API EulerPolesStatus::Value toEulerAnglesXYZ(EulerAngles& result, const Quaternion& quaternion);
	GLM_CORE_API EulerPolesStatus::Value toEulerAnglesXZY(EulerAngles& result, const Quaternion& quaternion);
	GLM_CORE_API EulerPolesStatus::Value toEulerAnglesYZX(EulerAngles& result, const Quaternion& quaternion);
	GLM_CORE_API EulerPolesStatus::Value toEulerAnglesYXZ(EulerAngles& result, const Quaternion& quaternion);
	GLM_CORE_API EulerPolesStatus::Value toEulerAnglesZXY(EulerAngles& result, const Quaternion& quaternion);
	GLM_CORE_API EulerPolesStatus::Value toEulerAnglesZYX(EulerAngles& result, const Quaternion& quaternion);

	GLM_CORE_API EulerPolesStatus::Value toEulerHeadingZYX(float& headingResult, const Quaternion& quaternion);

	GLM_CORE_API void extractHeadingAndAttitudeFromWorldDirection(const glm::Vector3& worldDirection, float& heading, float& attitude);

}

