#pragma once

#if defined(NDEBUG)
	#define EHS_RELEASE
#else
	#define EHS_DEBUG
#endif

#include "Types.h"
#include "ehs/system/OS.h"
#include "Version.h"
#include "Str.h"

namespace ehs
{
	enum class MemoryPattern
    {
        SPEED,
        SIZE
    };

	EHS_LIB_IO void Initialize(Str_8 appName, Str_8 appVerId, const Version &appVer);

	EHS_LIB_IO void Uninitialize();

	/// Retrieves the UTF32 C-style string as "Event Horizon Standard"
	/// @returns The result.
	EHS_LIB_IO const Char_32* GetName_32();

    /// Retrieves the UTF16 C-style string as "Event Horizon Standard"
    /// @returns The result.
	EHS_LIB_IO const Char_16* GetName_16();

    /// Retrieves the UTF8 C-style string as "Event Horizon Standard"
    /// @returns The result.
	EHS_LIB_IO const Char_8* GetName_8();

	EHS_LIB_IO Str_8 GetAppName_8();

	EHS_LIB_IO const Char_32* GetAcronym_32();

	EHS_LIB_IO const Char_16* GetAcronym_16();

	EHS_LIB_IO const Char_8* GetAcronym_8();

    /// Retrieves the version identifier in UTF32.
    /// @returns The result.
	EHS_LIB_IO const Char_32* GetVersionId_32();

    /// Retrieves the version identifier in UTF16.
    /// @returns The result.
	EHS_LIB_IO const Char_16* GetVersionId_16();

    /// Retrieves the version identifier in UTF8.
    /// @returns The result.
	EHS_LIB_IO const Char_8* GetVersionId_8();

	EHS_LIB_IO Str_8 GetAppVersionId_8();

    /// Retrieves the current Event Horizon Standard version.
    /// @returns The result.
	EHS_LIB_IO Version GetVersion();

	EHS_LIB_IO Version GetAppVersion();
};