belt = {}
--belt_id = {}
belt_status = false

local need_update = true
local inventory_open = false
local separator_spawned = false
local separator = "separator"
local ini = system_ini()
local inv_mass = 0

local debug = false
local flag

function update()

	if (need_update == false) then return end

	if debug == true and belt_status == true then get_console():execute("belt_status=false") end
	belt_status = false

	-- Спавним разделяющий елемент
	if (separator_spawned == false) then
		alife():create(separator,
			db.actor:position(),
			db.actor:level_vertex_id(),
			db.actor:game_vertex_id(),
			db.actor:id())
		separator_spawned = true
		if debug == true then get_console():execute("separator_spawned") end
		return
	end

	belt = {}
	--belt_id = {}
	flag = 0

	-- Сканируем инвентарь
	db.actor:inventory_for_each(scan_inv)
			
	if db.actor:item_in_slot(6) then
		if ini:line_exist(db.actor:item_in_slot(6):section(),"batt_life_standby") then
			if not belt["power_supply"] then
				if not db.actor:object("fake_weight") then
					amk.spawn_item_in_inv("fake_weight")
					amk.save_variable("fake_weight", 1)
				end
			end
		end		
	end	

	need_update = false

	-- Удаляем разделяющий елемент
	db.actor:inventory_for_each(del_separator)
	separator_spawned = false

	if debug == true and belt_status == false then get_console():execute("belt_status=true") end
	belt_status = true

	if debug == true then
		for i,k in pairs(belt) do
			get_console():execute(i.."="..k)
		end
	end
end

-- Перебор предметов инвентаря
function scan_inv(item)
	local section = item:section()

	if section == separator then
		flag = 1
		return
	end

	if flag == 1 then
		if slot_item(item) ~= nil then
			flag = 2
		else
			insert_to_table(belt, section)
			--belt_id[item:id()] = true
		end
	end
end

-- Добавление в таблицу
function insert_to_table(tbl, section)
	if tbl[section] == nil then
		tbl[section] = 1
	else
		tbl[section] = tbl[section] + 1
	end
end

-- Удаление разделяющего предмета
function del_separator(item)
	if item:section() == separator then
		local sobj = alife():object(item:id())
		if sobj then
			alife():release(sobj, true)
		end
		if debug == true then get_console():execute("separator_removed") end
	end
end

-- Определение налечия предмета в одном из слотов
function slot_item(item)
	for i=0,12 do
		local obj = db.actor:item_in_slot(i)
		if obj and item:id() == obj:id() then
			return i
		end
	end

	return nil
end

-- Поднятие предмета
function on_item_take(item)
	add_mass(obj:section())
	if item:section() == separator then return end

	if (inventory_open == false) then
		if (separator_spawned == true) then
			db.actor:inventory_for_each(del_separator)
			separator_spawned = false
		end

		need_update = true
		if debug == true then get_console():execute("item_take") end
	end
end

-- Выброс предмета
function on_item_drop(item)
	subtract_mass(obj:section())
	if item:section() == separator then return end

	if (inventory_open == false) then
		if (separator_spawned == true) then
			db.actor:inventory_for_each(del_separator)
			separator_spawned = false
		end

		need_update = true
		if debug == true then get_console():execute("item_drop") end
	end
end

-- Открытие/закрытие инвентаря
function on_inventory_info(info_id)
	if info_id == "ui_inventory" then
		inventory_open = true
		lwc_bdet.on_inventory_open()
		if debug == true then get_console():execute("inventory_open") end

	elseif info_id == "ui_inventory_hide" then
		inventory_open = false
		need_update = true
		if debug == true then get_console():execute("inventory_close") end
		lwc_bdet.on_inventory_hide()
	end
end

-- Добавление массы
function add_mass(sect)
	if ini:line_exist(sect,"inv_weight") then
		mass = ini:r_float(sect,"inv_weight")
	else
		mass = 0
	end
	inv_mass = inv_mass + mass
end

-- Уменьшение массы
function subtract_mass(sect)
	if ini:line_exist(sect,"inv_weight") then
		mass = ini:r_float(sect,"inv_weight")
	else
		mass = 0
	end
	inv_mass = inv_mass - mass
end

-- Возвращает массу
function get_mass()
	-- масса приблизительная - все пачки патронов весят как полные, патроны в оружии не весят ничего 
	return inv_mass
end
