--- Disable new players from having certain items in their inventory, most commonly nukes
-- @addon Nukeprotect

local ExpUtil = require("modules/exp_util")
local Event = require("modules/exp_legacy/utils/event") --- @dep utils.event
local Roles = require("modules.exp_legacy.expcore.roles") --- @dep expcore.roles
local config = require("modules.exp_legacy.config.nukeprotect") --- @dep config.nukeprotect

--- Check all items in the given inventory
---@param player LuaPlayer
---@param type defines.inventory
local function check_items(player, type)
    -- if the player has perms to be ignored, then they should be
    if config.ignore_permisison and Roles.player_allowed(player, config.ignore_permisison) then return end
    -- if the players
    if config.ignore_admins and player.admin then return end

    local items = {} --- @type LuaItemStack[]
    local inventory = assert(player.get_inventory(type))
    for i = 1, #inventory do
        local item = inventory[i]
        if item.valid and item.valid_for_read and config[tostring(type)][item.name] then
            player.print{ "nukeprotect.found", { "item-name." .. item.name } }
            items[#items + 1] = item
        end
    end

    ExpUtil.move_items_to_surface{
        items = items,
        surface = game.planets.nauvis.surface,
        allow_creation = true,
        name = "iron-chest",
    }
end

for _, inventory in ipairs(config.inventories) do
    if #inventory.items > 0 then
        Event.add(inventory.event, function(event)
            local player = game.players[event.player_index]
            if player and player.valid then
                check_items(player, inventory.inventory)
            end
        end)
    end
end

if config.disable_nuke_research then
    Event.add(defines.events.on_research_started, function(event)
        local name = event.research.name
        if config.disable_nuke_research_names[name] then
            event.research.force.cancel_current_research()
        end
    end)
end
