#include "cg_lua.h"

#ifdef CG_LUA
static int Cent_GC(lua_State * L)
{

	return 0;
}

static int Cent_ToString(lua_State * L)
{
	cent_t     *cent;
	centity_t  *ent;
	char            buf[MAX_STRING_CHARS];

	cent = Lua_GetCent(L, 1);
	ent = cent->e;
	Com_sprintf(buf, sizeof(buf), "centity: id=%d pointer=%p\n", ent - cg_entities, ent);
	lua_pushstring(L, buf);

	return 1;
}

static const luaL_Reg Centity_ctor[] = {
	{NULL,						NULL}
};

static const luaL_Reg Centity_meta[] = {
	{"__gc",						Cent_GC},
	{"__tostring",					Cent_ToString},

	{NULL, NULL}
};

/*void dummy(gentity_t *ent) {
	ent->timestamp;
}*/

int Luaopen_Cent(lua_State * L)
{
	luaL_newmetatable(L, "cgame.centity");

	lua_pushstring(L, "__index");
	lua_pushvalue(L, -2);
	lua_settable(L, -3);

	luaL_register(L, NULL, Centity_meta);
	luaL_register(L, "centity", Centity_ctor);

	return 1;
}

void Lua_PushCent(lua_State * L, centity_t * ent)
{
	cent_t     *cent;

	if(!ent)
		lua_pushnil(L);
	else {
		cent = (cent_t *)lua_newuserdata(L, sizeof(cent_t));
		luaL_getmetatable(L, "cgame.centity");
		lua_setmetatable(L, -2);
		cent->e = ent;
	}
}

cent_t *Lua_GetCent(lua_State * L, int argNum)
{
	void           *ud;

	ud = luaL_checkudata(L, argNum, "cgame.centity");
	luaL_argcheck(L, ud != NULL, argNum, "\'centity\' expected");
	return (cent_t *) ud;
}
#endif