/*
 * 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 "ITickable.hpp"
#include "ICloseable.hpp"
#include "Version.hpp"
#include <string>

namespace OpenVulkano
{
	class IGraphicsAppManager;

	class IGraphicsApp : public ITickable, public ICloseable
	{
	private:
		IGraphicsAppManager* m_manager = nullptr;

	public:
		~IGraphicsApp() override = default;

		virtual void Init() = 0;
		virtual void InitPostGraphics() {}
		virtual void CloseFinalize() {}
		[[nodiscard]] IGraphicsAppManager* GetGraphicsAppManager() const { return m_manager; }
		void SetGraphicsAppManager(IGraphicsAppManager* manager) { m_manager = manager; }
		[[nodiscard]] virtual std::string GetAppName() const = 0;
		[[nodiscard]] virtual Version GetAppVersion() const = 0;
	};
}
