#ifdef STEAM
#include "steam.h"
#endif
#include "etc.h"
#include "sharedstate.h"
#include "binding-util.h"
#include "binding-types.h"
#include "debugwriter.h"

RB_METHOD(steamEnabled){
	RB_UNUSED_PARAM;

#ifdef STEAM
	return Qtrue;
#else
	return Qfalse;
#endif
}

RB_METHOD(steamUnlock){
	RB_UNUSED_PARAM;

    const char *name;
	rb_get_args(argc, argv, "z", &name RB_ARG_END);

#ifdef STEAM
	shState->steam().unlock(name);
#endif
	return Qnil;
}

RB_METHOD(steamLock){
	RB_UNUSED_PARAM;

	const char *name;
	rb_get_args(argc, argv, "z", &name RB_ARG_END);

#ifdef STEAM
	shState->steam().lock(name);
#endif
	return Qnil;
}

RB_METHOD(steamUnlocked){
	RB_UNUSED_PARAM;

	const char *name;
	rb_get_args(argc, argv, "z", &name RB_ARG_END);

#ifdef STEAM
	return shState->steam().isUnlocked(name) ? Qtrue : Qfalse;
#else
	return Qfalse;
#endif
}

void steamBindingInit(){
	printf("[steamBindingInit] Initializing Steam binding\n");
    VALUE module = rb_define_module("Steam");

	/* Constants */
#ifdef STEAM
	rb_const_set(module, rb_intern("USER_NAME"), rb_str_new2(shState->steam().userName().c_str()));
	if (shState->steam().lang().empty())
		rb_const_set(module, rb_intern("LANG"), Qnil);
	else
		rb_const_set(module, rb_intern("LANG"), rb_str_new2(shState->steam().lang().c_str()));
#else
	rb_const_set(module, rb_intern("USER_NAME"), Qnil);
	rb_const_set(module, rb_intern("LANG"), Qnil);
#endif

	/* Functions */
	_rb_define_module_function(module, "enabled?", steamEnabled);
    _rb_define_module_function(module, "unlock", steamUnlock);
	_rb_define_module_function(module, "lock", steamLock);
	_rb_define_module_function(module, "unlocked?", steamUnlocked);
}
