#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
    };

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

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

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

	Str_8 GetAppName_8();

    const Char_32* GetAcronym_32();

    const Char_16* GetAcronym_16();

    const Char_8* GetAcronym_8();

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

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

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

	Str_8 GetAppVersionId_8();

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

	Version GetAppVersion();
};

extern ehs::SInt_32 Main(ehs::Str_8* appName, ehs::Str_8* appVerId, ehs::Version* appVer);