// Copyright (c) Meta Platforms, Inc. and affiliates.

#pragma once

#include "OculusXRMovementTypes.h"

namespace XRSpaceFlags
{
	static const uint64 XR_SPACE_LOCATION_ORIENTATION_VALID_BIT = 0x00000001;
	static const uint64 XR_SPACE_LOCATION_POSITION_VALID_BIT = 0x00000002;
	static const uint64 XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT = 0x00000004;
	static const uint64 XR_SPACE_LOCATION_POSITION_TRACKED_BIT = 0x00000008;
} // namespace XRSpaceFlags

struct OCULUSXRMOVEMENT_API OculusXRMovement
{
	static bool GetBodyState(FOculusXRBodyState& outOculusXRBodyState, float WorldToMeters = 100.0f);
	static bool IsBodyTrackingEnabled();
	static bool IsBodyTrackingSupported();
	static bool StartBodyTracking();
	static bool StopBodyTracking();
	static bool StartBodyTrackingByJointSet(EOculusXRBodyJointSet jointSet);
	static bool RequestBodyTrackingFidelity(EOculusXRBodyTrackingFidelity fidelity);
	static bool ResetBodyTrackingCalibration();
	static bool SuggestBodyTrackingCalibrationOverride(float height);
private:
	static bool IsFullBodyTrackingEnabled();

public:
	static bool GetFaceState(FOculusXRFaceState& outOculusXRFaceState);
	static bool IsFaceTrackingEnabled();
	static bool IsFaceTrackingSupported();
	static bool StartFaceTracking();
	static bool StopFaceTracking();

	static bool GetEyeGazesState(FOculusXREyeGazesState& outOculusXREyeGazesState, float WorldToMeters = 100.0f);
	static bool IsEyeTrackingEnabled();
	static bool IsEyeTrackingSupported();
	static bool StartEyeTracking();
	static bool StopEyeTracking();
};
