-- Inefficient pattern matching

local warned_funcs = {}
local function LOG_ONCE(funcname)
	if warned_funcs[funcname] then return end
	warned_funcs[funcname] = true
	minetest.log("error", "Call to undocumented, deprecated API '" .. funcname .. "'."
		.. " In a future version of Unified Inventory this will result in a real error.")
end

function unified_inventory.canonical_item_spec_matcher(spec)
	LOG_ONCE("canonical_item_spec_matcher")
	local specname = ItemStack(spec):get_name()
	if specname:sub(1, 6) ~= "group:" then
		return function (itemname)
			return itemname == specname
		end
	end

	local group_names = specname:sub(7):split(",")
	return function (itemname)
		local itemdef = minetest.registered_items[itemname]
		for _, group_name in ipairs(group_names) do
			if (itemdef.groups[group_name] or 0) == 0 then
				return false
			end
		end
		return true
	end
end

function unified_inventory.item_matches_spec(item, spec)
	LOG_ONCE("item_matches_spec")
	local itemname = ItemStack(item):get_name()
	return unified_inventory.canonical_item_spec_matcher(spec)(itemname)
end


unified_inventory.registered_group_items = {
	mesecon_conductor_craftable = "mesecons:wire_00000000_off",
	stone = "default:cobble",
	wood = "default:wood",
	book = "default:book",
	sand = "default:sand",
	leaves = "default:leaves",
	tree = "default:tree",
	vessel = "vessels:glass_bottle",
	wool = "wool:white",
}

function unified_inventory.register_group_item(groupname, itemname)
	LOG_ONCE("register_group_item")
	unified_inventory.registered_group_items[groupname] = itemname
end