
-- Create detached creative inventory after loading all mods
minetest.after(0.01, function()
	unified_inventory.items_list = {}
	for name, def in pairs(minetest.registered_items) do
		if (not def.groups.not_in_creative_inventory or
		   def.groups.not_in_creative_inventory == 0) and
		   def.description and def.description ~= "" then
			table.insert(unified_inventory.items_list, name)
			local recipes = minetest.get_all_craft_recipes(name)
			if unified_inventory.crafts_table[name] == nil then
				unified_inventory.crafts_table[name] = {}
			end
			if recipes then 
				for i=1,#recipes,1 do
					table.insert(unified_inventory.crafts_table[name],recipes[i])
				end
			end
		end
	end
	table.sort(unified_inventory.items_list)
	unified_inventory.items_list_size = #unified_inventory.items_list
	print("Unified Inventory. inventory size: "..#unified_inventory.items_list)
end)


-- load_home
local function load_home()
	local input = io.open(unified_inventory.home_filename, "r")
	if input then
		while true do
			local x = input:read("*n")
			if x == nil then
				break
			end
			local y = input:read("*n")
			local z = input:read("*n")
			local name = input:read("*l")
			unified_inventory.home_pos[name:sub(2)] = {x = x, y = y, z = z}
		end
		io.close(input)
	else
		unified_inventory.home_pos = {}
	end
end
load_home()

function unified_inventory.set_home(player, pos)
	local player_name = player:get_player_name()
	unified_inventory.home_pos[player_name] = pos
	-- save the home data from the table to the file
	local output = io.open(unified_inventory.home_filename, "w")
	for k, v in pairs(unified_inventory.home_pos) do
		if v ~= nil then
			output:write(math.floor(v.x).." "
					..math.floor(v.y).." "
					..math.floor(v.z).." "
					..k.."\n")
		end
	end
	io.close(output)
end

function unified_inventory.go_home(player)
	local pos = unified_inventory.home_pos[player:get_player_name()]
	if pos ~= nil then
		player:setpos(pos)
	end
end

-- register_craft
function unified_inventory.register_craft(options)
	if  options.output == nil then
		return
	end
	local itemstack = ItemStack(options.output)
	if itemstack:is_empty() then
		return
	end
	if unified_inventory.crafts_table[itemstack:get_name()] == nil then
		unified_inventory.crafts_table[itemstack:get_name()] = {}
	end
	table.insert(unified_inventory.crafts_table[itemstack:get_name()],options)
end

function unified_inventory.register_page(name, def)
	unified_inventory.pages[name] = def
end

function unified_inventory.register_button(name, def)
	if not def.action then
		def.action = function(player)
			unified_inventory.set_inventory_formspec(player, name)
		end
	end
	def.name = name
	table.insert(unified_inventory.buttons, def)
end

function unified_inventory.is_creative(playername)
	if minetest.check_player_privs(playername, {creative=true}) or
	   minetest.setting_getbool("creative_mode") then
		return true
	end
end
