-- Unified Inventory

local modpath = minetest.get_modpath(minetest.get_current_modname())
local worldpath = minetest.get_worldpath()

-- Data tables definitions
unified_inventory = {
	activefilter = {},
	active_search_direction = {},
	alternate = {},
	current_page = {},
	current_searchbox = {},
	current_category = {},
	current_category_scroll = {},
	current_index = {},
	current_item = {},
	current_craft_direction = {},
	registered_craft_types = {},
	crafts_for = { usage = {}, recipe = {} },
	players = {},
	items_list_size = 0,
	items_list = {},
	filtered_items_list_size = {},
	filtered_items_list = {},
	pages = {},
	buttons = {},
	initialized_callbacks = {},
	craft_registered_callbacks = {},

	-- Homepos stuff
	home_pos = {},
	home_filename = worldpath .. "/unified_inventory_home.home",

	-- Default inventory page
	default = "craft",

	-- "Lite" mode
	lite_mode = minetest.settings:get_bool("unified_inventory_lite"),

	-- Items automatically added to categories based on item definitions
	automatic_categorization = (minetest.settings:get_bool("unified_inventory_automatic_categorization") ~= false),

	-- Trash enabled
	trash_enabled = (minetest.settings:get_bool("unified_inventory_trash") ~= false),
	imgscale = 1,
	list_img_offset = 0.13,
	--	standard_background = "bgcolor[#0000]background9[0,0;1,1;ui_formbg_9_sliced.png;true;16]",
	standard_background = "",
	hide_disabled_buttons = minetest.settings:get_bool("unified_inventory_hide_disabled_buttons", false),
	hide_uncraftable_items = minetest.settings:get_bool("unified_inventory_hide_uncraftable_items", false),

	version = 5 + math.pi -- hehe!
}

local ui = unified_inventory

-- These tables establish position and layout for the two UI styles.
-- UI doesn't use formspec_[xy] anymore, but other mods may need them.

ui.style_full = {
	formspec_x = 1,
	formspec_y = 1,
	formw = 17.75,
	formh = 12.25,
	-- Item browser size, pos
	pagecols = 8,
	pagerows = 9,
	page_x = 10.75,
	page_y = 2.30,
	-- Item browser controls
	page_buttons_x = 11.60,
	page_buttons_y = 10.15,
	searchwidth = 3.4,
	-- Crafting grid positions
	craft_x = 2.8,
	craft_y = 1.15,
	craftresult_x = 7.8,
	craft_arrow_x = 6.55,
	craft_guide_x = 3.3,
	craft_guide_y = 1.15,
	craft_guide_arrow_x = 7.05,
	craft_guide_result_x = 8.3,
	craft_guide_resultstr_x = 0.3,
	craft_guide_resultstr_y = 0.6,
	give_btn_x = 0.25,
	-- Tab switching buttons
	main_button_x = 0.4,
	main_button_y = 11.0,
	main_button_cols = 12,
	main_button_rows = 1,
	-- Tab title position
	form_header_x = 0.4,
	form_header_y = 0.4,
	-- Generic sizes
	btn_spc = 0.85,
	btn_size = 0.75,
	std_inv_x = 0.3,
	std_inv_y = 5.75,
}

ui.style_lite = {
	formspec_x = 0.6,
	formspec_y = 0.6,
	formw = 14,
	formh = 9.75,
	-- Item browser size, pos
	pagecols = 4,
	pagerows = 5,
	page_x = 10.5,
	page_y = 2.15,
	-- Item browser controls
	page_buttons_x = 10.5,
	page_buttons_y = 6.15,
	searchwidth = 1.6,
	-- Crafting grid positions
	craft_x = 2.6,
	craft_y = 0.75,
	craftresult_x = 5.75,
	craft_arrow_x = 6.35,
	craft_guide_x = 3.1,
	craft_guide_y = 0.75,
	craft_guide_arrow_x = 7.05,
	craft_guide_result_x = 8.3,
	craft_guide_resultstr_x = 0.15,
	craft_guide_resultstr_y = 0.35,
	give_btn_x = 0.15,
	-- Tab switching buttons
	main_button_x = 10.5,
	main_button_y = 8.15,
	main_button_cols = 4,
	main_button_rows = 2,
	-- Tab title position
	form_header_x = 0.2,
	form_header_y = 0.2,
	-- Generic sizes
	btn_spc = 0.8,
	btn_size = 0.7,
	std_inv_x = 0.1,
	std_inv_y = 4.6,
}

dofile(modpath .. "/api.lua")

for _, style in ipairs({ ui.style_full, ui.style_lite }) do
	style.items_per_page = style.pagecols * style.pagerows
	style.standard_inv = string.format("list[current_player;main;%f,%f;8,4;]",
		style.std_inv_x + ui.list_img_offset, style.std_inv_y + ui.list_img_offset)

	style.standard_inv_bg = ui.make_inv_img_grid(style.std_inv_x, style.std_inv_y, 8, 1, true) ..
		ui.make_inv_img_grid(style.std_inv_x, style.std_inv_y + ui.imgscale, 8, 3)

	style.craft_grid = table.concat({
		ui.make_inv_img_grid(style.craft_x, style.craft_y, 3, 3),
		ui.single_slot(style.craft_x + ui.imgscale * 4, style.craft_y), -- the craft result slot
		string.format("image[%f,%f;%f,%f;ui_crafting_arrow.png]",
			style.craft_arrow_x, style.craft_y, ui.imgscale, ui.imgscale),
		string.format("list[current_player;craft;%f,%f;3,3;]",
			style.craft_x + ui.list_img_offset, style.craft_y + ui.list_img_offset),
		string.format("list[current_player;craftpreview;%f,%f;1,1;]",
			style.craftresult_x + ui.list_img_offset, style.craft_y + ui.list_img_offset)
	})
end

dofile(modpath .. "/group.lua")
dofile(modpath .. "/category.lua")
dofile(modpath .. "/default-categories.lua")
dofile(modpath .. "/internal.lua")
dofile(modpath .. "/callbacks.lua")
dofile(modpath .. "/match_craft.lua")
dofile(modpath .. "/register.lua")
dofile(modpath .. "/item_names.lua")
