#pragma once

#include <Core/Common/CoreTypes.h>
#include <Core/Common/NonNullPtr.h>
#include <Core/Memory/MemoryArena.h>
#include <Juliet.h>

// TODO : Juliet strings
// TODO Juliet Containers + Allocators...
// TODO: Juliet chrono, because it prevents me from doing #define global static

namespace Juliet
{
    enum class LogLevel : uint8;
    enum class LogCategory : uint8;

    extern void JULIET_API InitializeLogManager();
    extern void JULIET_API ShutdownLogManager();

    extern void JULIET_API LogScopeBegin();
    // TODO everything that happened in there to export them to file or something
    extern void JULIET_API LogScopeEnd();

    extern void JULIET_API Log(LogLevel level, LogCategory category, const char* fmt, ...);
    extern void JULIET_API LogDebug(LogCategory category, const char* fmt, ...);
    extern void JULIET_API LogMessage(LogCategory category, const char* fmt, ...);
    extern void JULIET_API LogWarning(LogCategory category, const char* fmt, ...);
    extern void JULIET_API LogError(LogCategory category, const char* fmt, ...);
} // namespace Juliet
