local S = minetest.get_translator("unified_inventory")
local ui = unified_inventory

unified_inventory.register_category('plants', {
	symbol = "flowers:tulip",
	label = S("Plant Life")
})
unified_inventory.register_category('building', {
	symbol = "default:brick",
	label = S("Building Materials")
})
unified_inventory.register_category('tools', {
	symbol = "default:pick_diamond",
	label = S("Tools")
})
unified_inventory.register_category('minerals', {
	symbol = "default:iron_lump",
	label = S("Minerals and Metals")
})
unified_inventory.register_category('environment', {
	symbol = "default:dirt_with_grass",
	label = S("Environment and Worldgen")
})
unified_inventory.register_category('lighting', {
	symbol = "default:torch",
	label = S("Lighting")
})

local function register_automatic_categorization()
	-- Add biome nodes to environment category
	for _,def in pairs(minetest.registered_biomes) do
		local env_nodes = {
			def.node_riverbed, def.node_top, def.node_filler, def.node_dust,
		}
		for i,node in pairs(env_nodes) do
			if node then
				unified_inventory.add_category_item('environment', node)
			end
		end
	end

	-- Preparation for ore registration: find all possible drops (digging)
	local possible_node_dig_drops = {
		-- ["default:stone_with_coal"] = { "default:coal_lump", "mymod:raregem" }
		-- Ores may be contained multiple times, depending on drop chances.
	}
	for itemname, recipes in pairs(ui.crafts_for.usage) do
		for _, recipe in ipairs(recipes) do
			if recipe.type == "digging" or recipe.type == "digging_chance" then
				if not possible_node_dig_drops[itemname] then
					possible_node_dig_drops[itemname] = {}
				end
				local stack = ItemStack(recipe.output)
				table.insert(possible_node_dig_drops[itemname], stack:get_name())
			end
		end
	end

	-- Add minable ores to minerals and everything else (pockets of stone & sand variations) to environment
	for _, odef in pairs(minetest.registered_ores) do
		local drops = possible_node_dig_drops[odef.ore]
		if drops and odef.ore_type == "scatter" then
			ui.add_category_item('minerals', odef.ore)
			-- Register all possible drops as "minerals"
			ui.add_category_items('minerals', drops)
			possible_node_dig_drops[odef.ore] = {} -- mask as handled
		else
			ui.add_category_item('environment', odef.ore)
		end
	end

	-- Add items by item definition
	for name, def in pairs(minetest.registered_items) do
		local group = def.groups or {}
		if not group.not_in_creative_inventory then
			if group.stair or
			   group.slab or
			   group.wall or
			   group.fence then
				unified_inventory.add_category_item('building', name)
			elseif group.flora or
				   group.flower or
				   group.seed or
				   group.leaves or
				   group.sapling or
				   group.tree then
				unified_inventory.add_category_item('plants', name)
			elseif def.type == 'tool' or def.tool_capabilities then
				unified_inventory.add_category_item('tools', name)
			elseif def.liquidtype == 'source' then
				unified_inventory.add_category_item('environment', name)
			elseif def.light_source and def.light_source > 0 then
				unified_inventory.add_category_item('lighting', name)
			elseif group.door or
				   minetest.global_exists("doors") and (
					 doors.registered_doors and doors.registered_doors[name..'_a'] or
					 doors.registered_trapdoors and doors.registered_trapdoors[name]
				   ) then
				unified_inventory.add_category_item('building', name)
			end
		end
	end
end

if ui.automatic_categorization then
	ui.register_on_initialized(register_automatic_categorization)
end


-- [[
unified_inventory.add_category_items('plants', {
	"default:dry_grass_5",
	"default:acacia_sapling",
	"default:blueberry_bush_sapling",
	"default:grass_2",
	"default:pine_bush_stem",
	"default:leaves",
	"default:pine_needles",
	"default:cactus",
	"default:junglegrass",
	"default:pine_sapling",
	"default:sapling",
	"default:bush_stem",
	"default:dry_grass_2",
	"default:fern_1",
	"default:grass_3",
	"default:marram_grass_1",
	"default:pine_tree",
	"default:dry_grass_3",
	"default:dry_shrub",
	"default:grass_4",
	"default:marram_grass_2",
	"default:jungleleaves",
	"default:apple",
	"default:tree",
	"default:aspen_tree",
	"default:bush_sapling",
	"default:grass_5",
	"default:blueberry_bush_leaves_with_berries",
	"default:acacia_bush_sapling",
	"default:grass_1",
	"default:aspen_leaves",
	"default:marram_grass_3",
	"default:large_cactus_seedling",
	"default:junglesapling",
	"default:dry_grass_4",
	"default:acacia_bush_stem",
	"default:papyrus",
	"default:pine_bush_needles",
	"default:bush_leaves",
	"default:fern_3",
	"default:aspen_sapling",
	"default:acacia_tree",
	"default:apple_mark",
	"default:acacia_leaves",
	"default:jungletree",
	"default:dry_grass_1",
	"default:acacia_bush_leaves",
	"default:emergent_jungle_sapling",
	"default:fern_2",
	"default:blueberries",
	"default:sand_with_kelp",
	"default:blueberry_bush_leaves",
	"default:pine_bush_sapling",

	"farming:cotton",
	"farming:cotton_1",
	"farming:cotton_2",
	"farming:cotton_3",
	"farming:cotton_4",
	"farming:cotton_5",
	"farming:cotton_6",
	"farming:cotton_7",
	"farming:cotton_8",
	"farming:cotton_wild",
	"farming:seed_cotton",
	"farming:seed_wheat",
	"farming:straw",
	"farming:wheat",
	"farming:wheat_1",
	"farming:wheat_2",
	"farming:wheat_3",
	"farming:wheat_4",
	"farming:wheat_5",
	"farming:wheat_6",
	"farming:wheat_7",
	"farming:wheat_8",

	"flowers:chrysanthemum_green",
	"flowers:dandelion_white",
	"flowers:dandelion_yellow",
	"flowers:geranium",
	"flowers:mushroom_brown",
	"flowers:mushroom_red",
	"flowers:rose",
	"flowers:tulip",
	"flowers:tulip_black",
	"flowers:viola",
	"flowers:waterlily",
	"flowers:waterlily_waving",
})

unified_inventory.add_category_items('tools', {
	"default:sword_diamond",
	"default:axe_diamond",
	"default:shovel_diamond",
	"default:axe_steel",
	"default:shovel_mese",
	"default:sword_wood",
	"default:pick_bronze",
	"default:axe_stone",
	"default:sword_stone",
	"default:pick_stone",
	"default:shovel_stone",
	"default:sword_mese",
	"default:shovel_bronze",
	"default:sword_bronze",
	"default:axe_bronze",
	"default:shovel_steel",
	"default:sword_steel",
	"default:axe_mese",
	"default:shovel_wood",
	"default:pick_mese",
	"default:axe_wood",
	"default:pick_diamond",
	"default:pick_wood",
	"default:pick_steel",

	"farming:hoe_bronze",
	"farming:hoe_diamond",
	"farming:hoe_mese",
	"farming:hoe_steel",
	"farming:hoe_stone",
	"farming:hoe_wood",

	"fire:flint_and_steel",
	"map:mapping_kit",
	"screwdriver:screwdriver",

	"fireflies:bug_net",
	"bucket:bucket_empty",

	"binoculars:binoculars",
	"default:skeleton_key",
})

unified_inventory.add_category_items('minerals', {
	"default:stone_with_copper",
	"default:stone_with_gold",
	"default:stone_with_iron",
	"default:copper_ingot",
	"default:copper_lump",
	"default:gold_lump",
	"default:diamondblock",
	"default:stone_with_diamond",
	"default:stone_with_mese",
	"default:steel_ingot",
	"default:gold_ingot",
	"default:iron_lump",
	"default:tinblock",
	"default:tin_lump",
	"default:stone_with_tin",
	"default:mese_crystal",
	"default:diamond",
	"default:bronze_ingot",
	"default:mese",
	"default:mese_crystal_fragment",
	"default:copperblock",
	"default:stone_with_coal",
	"default:steelblock",
	"default:tin_ingot",
	"default:coalblock",
	"default:coal_lump",
	"default:bronzeblock",
	"default:goldblock",
})

unified_inventory.add_category_items('building', {
	"default:fence_rail_aspen_wood",
	"default:fence_rail_acacia_wood",
	"default:fence_junglewood",
	"default:fence_rail_junglewood",
	"default:fence_aspen_wood",
	"default:fence_pine_wood",
	"default:fence_rail_wood",
	"default:fence_rail_pine_wood",
	"default:fence_acacia_wood",
	"default:junglewood",
	"default:acacia_wood",
	"default:aspen_wood",
	"default:fence_wood",
	"default:pine_wood",
	"default:silver_sandstone",
	"default:desert_sandstone",
	"default:sandstone_block",
	"default:desert_sandstone_brick",
	"default:stone_block",
	"default:stonebrick",
	"default:obsidian_glass",
	"default:desert_sandstone_block",
	"default:silver_sandstone_brick",
	"default:brick",
	"default:obsidianbrick",
	"default:sandstonebrick",
	"default:sandstone",
	"default:desert_stone_block",
	"default:silver_sandstone_block",
	"default:wood",
	"default:obsidian_block",
	"default:glass",
	"default:clay_brick",
	"default:desert_stonebrick",
	"default:desert_cobble",
	"default:cobble",
	"default:mossycobble",

	"doors:door_glass",
	"doors:door_glass_a",
	"doors:door_glass_b",
	"doors:door_glass_c",
	"doors:door_glass_d",
	"doors:door_obsidian_glass",
	"doors:door_obsidian_glass_a",
	"doors:door_obsidian_glass_b",
	"doors:door_obsidian_glass_c",
	"doors:door_obsidian_glass_d",
	"doors:door_steel",
	"doors:door_steel_a",
	"doors:door_steel_b",
	"doors:door_steel_c",
	"doors:door_steel_d",
	"doors:door_wood",
	"doors:door_wood_a",
	"doors:door_wood_b",
	"doors:door_wood_c",
	"doors:door_wood_d",
	"doors:gate_acacia_wood_closed",
	"doors:gate_acacia_wood_open",
	"doors:gate_aspen_wood_closed",
	"doors:gate_aspen_wood_open",
	"doors:gate_junglewood_closed",
	"doors:gate_junglewood_open",
	"doors:gate_pine_wood_closed",
	"doors:gate_pine_wood_open",
	"doors:gate_wood_closed",
	"doors:gate_wood_open",
	"doors:hidden",
	"doors:trapdoor",
	"doors:trapdoor_open",
	"doors:trapdoor_steel",
	"doors:trapdoor_steel_open",

	"stairs:slab_bronzeblock",
	"stairs:slab_copperblock",
	"stairs:slab_steelblock",
	"stairs:slab_tinblock",
	"stairs:stair_bronzeblock",
	"stairs:stair_copperblock",
	"stairs:stair_inner_bronzeblock",
	"stairs:stair_inner_copperblock",
	"stairs:stair_inner_steelblock",
	"stairs:stair_inner_tinblock",
	"stairs:stair_outer_bronzeblock",
	"stairs:stair_outer_copperblock",
	"stairs:stair_outer_steelblock",
	"stairs:stair_outer_tinblock",
	"stairs:stair_steelblock",
	"stairs:stair_tinblock",

	"stairs:slab_acacia_wood",
	"stairs:slab_aspen_wood",
	"stairs:slab_brick",
	"stairs:slab_cobble",
	"stairs:slab_desert_cobble",
	"stairs:slab_desert_sandstone",
	"stairs:slab_desert_sandstone_block",
	"stairs:slab_desert_sandstone_brick",
	"stairs:slab_desert_stone",
	"stairs:slab_desert_stone_block",
	"stairs:slab_desert_stonebrick",
	"stairs:slab_glass",
	"stairs:slab_goldblock",
	"stairs:slab_ice",
	"stairs:slab_junglewood",
	"stairs:slab_mossycobble",
	"stairs:slab_obsidian",
	"stairs:slab_obsidian_block",
	"stairs:slab_obsidian_glass",
	"stairs:slab_obsidianbrick",
	"stairs:slab_pine_wood",
	"stairs:slab_sandstone",
	"stairs:slab_sandstone_block",
	"stairs:slab_sandstonebrick",
	"stairs:slab_silver_sandstone",
	"stairs:slab_silver_sandstone_block",
	"stairs:slab_silver_sandstone_brick",
	"stairs:slab_snowblock",
	"stairs:slab_stone",
	"stairs:slab_stone_block",
	"stairs:slab_stonebrick",
	"stairs:slab_straw",
	"stairs:slab_wood",
	"stairs:stair_acacia_wood",
	"stairs:stair_aspen_wood",
	"stairs:stair_brick",
	"stairs:stair_cobble",
	"stairs:stair_desert_cobble",
	"stairs:stair_desert_sandstone",
	"stairs:stair_desert_sandstone_block",
	"stairs:stair_desert_sandstone_brick",
	"stairs:stair_desert_stone",
	"stairs:stair_desert_stone_block",
	"stairs:stair_desert_stonebrick",
	"stairs:stair_glass",
	"stairs:stair_goldblock",
	"stairs:stair_ice",
	"stairs:stair_inner_acacia_wood",
	"stairs:stair_inner_aspen_wood",
	"stairs:stair_inner_brick",
	"stairs:stair_inner_cobble",
	"stairs:stair_inner_desert_cobble",
	"stairs:stair_inner_desert_sandstone",
	"stairs:stair_inner_desert_sandstone_block",
	"stairs:stair_inner_desert_sandstone_brick",
	"stairs:stair_inner_desert_stone",
	"stairs:stair_inner_desert_stone_block",
	"stairs:stair_inner_desert_stonebrick",
	"stairs:stair_inner_glass",
	"stairs:stair_inner_goldblock",
	"stairs:stair_inner_ice",
	"stairs:stair_inner_junglewood",
	"stairs:stair_inner_mossycobble",
	"stairs:stair_inner_obsidian",
	"stairs:stair_inner_obsidian_block",
	"stairs:stair_inner_obsidian_glass",
	"stairs:stair_inner_obsidianbrick",
	"stairs:stair_inner_pine_wood",
	"stairs:stair_inner_sandstone",
	"stairs:stair_inner_sandstone_block",
	"stairs:stair_inner_sandstonebrick",
	"stairs:stair_inner_silver_sandstone",
	"stairs:stair_inner_silver_sandstone_block",
	"stairs:stair_inner_silver_sandstone_brick",
	"stairs:stair_inner_snowblock",
	"stairs:stair_inner_stone",
	"stairs:stair_inner_stone_block",
	"stairs:stair_inner_stonebrick",
	"stairs:stair_inner_straw",
	"stairs:stair_inner_wood",
	"stairs:stair_junglewood",
	"stairs:stair_mossycobble",
	"stairs:stair_obsidian",
	"stairs:stair_obsidian_block",
	"stairs:stair_obsidian_glass",
	"stairs:stair_obsidianbrick",
	"stairs:stair_outer_acacia_wood",
	"stairs:stair_outer_aspen_wood",
	"stairs:stair_outer_brick",
	"stairs:stair_outer_cobble",
	"stairs:stair_outer_desert_cobble",
	"stairs:stair_outer_desert_sandstone",
	"stairs:stair_outer_desert_sandstone_block",
	"stairs:stair_outer_desert_sandstone_brick",
	"stairs:stair_outer_desert_stone",
	"stairs:stair_outer_desert_stone_block",
	"stairs:stair_outer_desert_stonebrick",
	"stairs:stair_outer_glass",
	"stairs:stair_outer_goldblock",
	"stairs:stair_outer_ice",
	"stairs:stair_outer_junglewood",
	"stairs:stair_outer_mossycobble",
	"stairs:stair_outer_obsidian",
	"stairs:stair_outer_obsidian_block",
	"stairs:stair_outer_obsidian_glass",
	"stairs:stair_outer_obsidianbrick",
	"stairs:stair_outer_pine_wood",
	"stairs:stair_outer_sandstone",
	"stairs:stair_outer_sandstone_block",
	"stairs:stair_outer_sandstonebrick",
	"stairs:stair_outer_silver_sandstone",
	"stairs:stair_outer_silver_sandstone_block",
	"stairs:stair_outer_silver_sandstone_brick",
	"stairs:stair_outer_snowblock",
	"stairs:stair_outer_stone",
	"stairs:stair_outer_stone_block",
	"stairs:stair_outer_stonebrick",
	"stairs:stair_outer_straw",
	"stairs:stair_outer_wood",
	"stairs:stair_pine_wood",
	"stairs:stair_sandstone",
	"stairs:stair_sandstone_block",
	"stairs:stair_sandstonebrick",
	"stairs:stair_silver_sandstone",
	"stairs:stair_silver_sandstone_block",
	"stairs:stair_silver_sandstone_brick",
	"stairs:stair_snowblock",
	"stairs:stair_stone",
	"stairs:stair_stone_block",
	"stairs:stair_stonebrick",
	"stairs:stair_straw",
	"stairs:stair_wood",

	"xpanes:bar",
	"xpanes:bar_flat",
	"xpanes:door_steel_bar",
	"xpanes:door_steel_bar_a",
	"xpanes:door_steel_bar_b",
	"xpanes:door_steel_bar_c",
	"xpanes:door_steel_bar_d",
	"xpanes:obsidian_pane",
	"xpanes:obsidian_pane_flat",
	"xpanes:pane",
	"xpanes:pane_flat",
	"xpanes:trapdoor_steel_bar",
	"xpanes:trapdoor_steel_bar_open",

	"walls:cobble",
	"walls:desertcobble",
	"walls:mossycobble",
})

unified_inventory.add_category_items('environment', {
	"air",
	"default:cave_ice",
	"default:dirt_with_rainforest_litter",
	"default:gravel",
	"default:dry_dirt_with_dry_grass",
	"default:permafrost",
	"default:desert_stone",
	"default:ice",
	"default:dry_dirt",
	"default:obsidian",
	"default:sand",
	"default:river_water_source",
	"default:dirt_with_snow",
	"default:dirt_with_grass",
	"default:water_flowing",
	"default:dirt",
	"default:desert_sand",
	"default:permafrost_with_moss",
	"default:dirt_with_coniferous_litter",
	"default:water_source",
	"default:dirt_with_dry_grass",
	"default:river_water_flowing",
	"default:stone",
	"default:snow",
	"default:lava_flowing",
	"default:lava_source",
	"default:permafrost_with_stones",
	"default:dirt_with_grass_footsteps",
	"default:silver_sand",
	"default:snowblock",
	"default:clay",

	"farming:desert_sand_soil",
	"farming:desert_sand_soil_wet",
	"farming:dry_soil",
	"farming:dry_soil_wet",
	"farming:soil",
	"farming:soil_wet",
})

unified_inventory.add_category_items('lighting', {
	"default:mese_post_light_junglewood",
	"default:torch_ceiling",
	"default:meselamp",
	"default:torch",
	"default:mese_post_light_acacia_wood",
	"default:mese_post_light",
	"default:torch_wall",
	"default:mese_post_light_pine_wood",
	"default:mese_post_light_aspen_wood"
})
--]]


--[[ UNCATEGORISED

	"farming:string",

	"beds:bed_bottom",
	"beds:bed_top",
	"beds:fancy_bed_bottom",
	"beds:fancy_bed_top",
	"boats:boat",
	"bones:bones",

	"bucket:bucket_lava",
	"bucket:bucket_river_water",
	"bucket:bucket_water",

	"butterflies:butterfly_red",
	"butterflies:butterfly_violet",
	"butterflies:butterfly_white",
	"butterflies:hidden_butterfly_red",
	"butterflies:hidden_butterfly_violet",
	"butterflies:hidden_butterfly_white",

	"carts:brakerail",
	"carts:cart",
	"carts:powerrail",
	"carts:rail",

	"default:book",
	"default:book_written",
	"default:bookshelf",
	"default:chest",
	"default:chest_locked",
	"default:chest_locked_open",
	"default:chest_open",
	"default:clay_lump",
	"default:cloud",
	"default:coral_brown",
	"default:coral_cyan",
	"default:coral_green",
	"default:coral_orange",
	"default:coral_pink",
	"default:coral_skeleton",
	"default:flint",
	"default:furnace",
	"default:furnace_active",
	"default:key",
	"default:ladder_steel",
	"default:ladder_wood",
	"default:obsidian_shard",
	"default:paper",
	"default:sign_wall_steel",
	"default:sign_wall_wood",
	"default:stick",

	"fire:basic_flame",
	"fire:permanent_flame",
	"fireflies:firefly",
	"fireflies:firefly_bottle",
	"fireflies:hidden_firefly",

	"ignore",
	"unknown",

	"tnt:boom",
	"tnt:gunpowder",
	"tnt:gunpowder_burning",
	"tnt:tnt",
	"tnt:tnt_burning",
	"tnt:tnt_stick",

	"vessels:drinking_glass",
	"vessels:glass_bottle",
	"vessels:glass_fragments",
	"vessels:shelf",
	"vessels:steel_bottle",

	"dye:black",
	"dye:blue",
	"dye:brown",
	"dye:cyan",
	"dye:dark_green",
	"dye:dark_grey",
	"dye:green",
	"dye:grey",
	"dye:magenta",
	"dye:orange",
	"dye:pink",
	"dye:red",
	"dye:violet",
	"dye:white",
	"dye:yellow",

	"wool:black",
	"wool:blue",
	"wool:brown",
	"wool:cyan",
	"wool:dark_green",
	"wool:dark_grey",
	"wool:green",
	"wool:grey",
	"wool:magenta",
	"wool:orange",
	"wool:pink",
	"wool:red",
	"wool:violet",
	"wool:white",
	"wool:yellow",

	"unified_inventory:bag_large",
	"unified_inventory:bag_medium",
	"unified_inventory:bag_small",
--]]

--[[ LIST UNCATEGORIZED AFTER LOAD
minetest.register_on_mods_loaded(function()
	minetest.after(1, function ( )
		local l = {}
		for name,_ in pairs(minetest.registered_items) do
			if not unified_inventory.find_category(name) then
				-- minetest.log("error", minetest.serialize(minetest.registered_items[name]))
				table.insert(l, name)
			end
		end
		table.sort(l)
		minetest.log(table.concat(l, '",'.."\n"..'"'))
	end)
end)
--]]
