local mcl_skins_enabled = minetest.global_exists("mcl_skins")

-- This is a fake node that should never be placed in the world
local node_def = {
	description = "",
	use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false,
	visual_scale = 1,
	wield_scale = {x=1,y=1,z=1},
	paramtype = "light",
	drawtype = "mesh",
	node_placement_prediction = "",
	on_construct = function(pos)
		local name = get_node(pos).name
		local message = "[mcl_meshhand] Trying to construct " .. name .. " at " .. minetest.pos_to_string(pos)
		minetest.log("error", message)
		minetest.remove_node(pos)
	end,
	drop = "",
	on_drop = function() return "" end,
	groups = { dig_immediate = 3, not_in_creative_inventory = 1 },
	range = minetest.registered_items[""].range
}

if mcl_skins_enabled then
	-- Generate a node for every skin
	local list = mcl_skins.get_skin_list()
	for _, skin in pairs(list) do
		if skin.slim_arms then
			local female = table.copy(node_def)
			female._mcl_hand_id = skin.id
			female.mesh = "mcl_meshhand_female.b3d"
			female.tiles = {skin.texture}
			minetest.register_node("mcl_meshhand:" .. skin.id, female)
		else
			local male = table.copy(node_def)
			male._mcl_hand_id = skin.id
			male.mesh = "mcl_meshhand.b3d"
			male.tiles = {skin.texture}
			minetest.register_node("mcl_meshhand:" .. skin.id, male)
		end
	end
else
	node_def._mcl_hand_id = "hand"
	node_def.mesh = "mcl_meshhand.b3d"
	node_def.tiles = {"character.png"}
	minetest.register_node("mcl_meshhand:hand", node_def)
end

if mcl_skins_enabled then
	-- Change the player's hand to their skin
	mcl_player.register_on_visual_change(function(player)
		local node_id = mcl_skins.get_node_id_by_player(player)
		player:get_inventory():set_stack("hand", 1, "mcl_meshhand:" .. node_id)
	end)
else
	minetest.register_on_joinplayer(function(player)
		player:get_inventory():set_stack("hand", 1, "mcl_meshhand:hand")
	end)
end