/******************************************************************************
*	File		-	coreAPI.h
*	Author		-	Joey Pollack
*	Date		-	2021/09/23 (y/m/d)
*	Mod Date	-	2021/09/23 (y/m/d)
*	Description	-	class with all static methods that expose core functionality to LUA
*                   Need an init function that takes a reference to a LUA state so that it
*                   can expose the static functions to LUA.
******************************************************************************/

#ifndef CORE_API_H_
#define CORE_API_H_

#include <core/common_defs.h>
#include "wren_script.h"
#include <utils/op_res.h>
#include <input/input_manager.h>
#include <map>

struct WrenVM;

namespace lunarium
{
    class WrenState;

    class CoreAPI
    {
    public:
        static CoreAPI& GetInstance();
        static void FreeInstance();

        OpRes Initialize(WrenState& state);


    private:
        static CoreAPI* mpInstance;
        static WrenScript mScript;
        u32 mCat;
        

    private: // Helper methods
        std::string GenerateWrenKeyCodes();

    private: // Callbacks
        //static ForeignMethod ForeignMethodBinder(WrenVM* vm, const char* module, const char* className, bool isStatic, const char* signature);

    public: // API

        static void SetWindowSize(int w, int h);
        static void Log(int level, const char* msg);

        static void IsKeyDown(WrenVM* vm);

    };
}

#endif  // CORE_API_H_