/*
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at https://mozilla.org/MPL/2.0/.
 */

#pragma once

#include "AR/ArSession.hpp"

// Define the class of the native AR session to be used
#define NATIVE_AR_SESSION_CLASS ArKit::ArSessionArKit

namespace OpenVulkano::AR::ArKit
{
	/**
	 * This is just a helper intermediate class.
	 * The ArKit implementation is in ArSessionArKitInternal.
	 * This is done to prevent the leakage of any objective c or ArKit classes into the ArSession.cpp translation unit.
	 */
	class ArSessionArKit : public ArSession
	{
	public:
		[[nodiscard]] static std::shared_ptr<ArSession> Create(const ArSessionConfig& config);

		[[nodiscard]] static bool IsAvailable();

		[[nodiscard]] static const ArSessionCapabilities& GetCapabilities();

		[[nodiscard]] ArSessionType GetSessionType() final { return ArSessionType::NATIVE; }

		[[nodiscard]] ArType GetArType() final { return ArType::AR_KIT; }

	protected:
		ArSessionArKit();

		~ArSessionArKit() override = default;
	};
}