
#include "rive/lua/lua_state.hpp"
#ifdef WITH_RIVE_SCRIPTING
#include "rive/lua/rive_lua_libs.hpp"
#endif
#include "rive/viewmodel/viewmodel.hpp"
#include <stdio.h>
using namespace rive;

#ifdef WITH_RIVE_SCRIPTING
static int viewmodel_new(lua_State* L)
{
    // Get the viewModel pointer from the upvalue
    ViewModel* viewModel = (ViewModel*)lua_touserdata(L, lua_upvalueindex(1));
    if (viewModel)
    {

#ifdef WITH_RIVE_TOOLS
        viewModel->file()->triggerViewModelCreatedCallback(true);
#endif
        auto instance = viewModel->createInstance();
#ifdef WITH_RIVE_TOOLS
        viewModel->file()->triggerViewModelCreatedCallback(false);
#endif
        lua_newrive<ScriptedViewModel>(L, L, ref_rcp(viewModel), instance);
        return 1;
    }
    lua_pushnil(L);
    return 1;
}

void rive::initializeLuaData(lua_State* state,
                             std::vector<ViewModel*>& viewModels)
{
    if (state)
    {
        // create metatable for global Data
        luaL_newmetatable(state, "Data");

        // push it again as lua_setuserdatametatable pops it
        lua_pushvalue(state, -1);
        lua_setuserdatametatable(state, LUA_T_COUNT + 31);
        lua_pop(state, 1);
        lua_getfield(state, luaRegistryIndex, "Data");
        lua_setglobal(state, "Data");

        // Get the Data metatable back on the stack
        lua_getfield(state, luaRegistryIndex, "Data");

        for (auto& viewModel : viewModels)
        {
            // Create a new table for this viewModel
            lua_createtable(state, 0, 1);

            // Push the viewModel pointer as a light userdata (upvalue)
            lua_pushlightuserdata(state, viewModel);

            // Create a closure with the viewModel as an upvalue
            lua_pushcclosurek(state, viewmodel_new, "new", 1, nullptr);

            // Set the function as "new" in the table
            lua_setfield(state, -2, "new");

            // Set the table as a field in Data metatable using the viewModel
            // name
            lua_setfield(state, -2, viewModel->name().c_str());
        }

        // Pop the Data metatable from the stack
        lua_pop(state, 1);
    }
}

#endif