﻿---@type TalkAction
local talkAction = TalkAction("/i")

local invalidIds = {
    1, 2, 3, 4, 5, 6, 7, 10, 11, 13, 14, 15, 19, 21, 26, 27, 28, 35, 43
}

---@param player Player
---@param words string
---@param param string
function talkAction.onSay(player, words, param)
    if not player:getGroup():getAccess() then
        return true
    end

    -- if player:getAccountType() < ACCOUNT_TYPE_GOD then
    -- 	return false
    -- end

    local split = param:splitTrimmed(",")

    local itemType = ItemType(split[1])
    if itemType:getId() == 0 then
        itemType = ItemType(tonumber(split[1]))
        if not tonumber(split[1]) or itemType:getId() == 0 then
            player:sendCancelMessage("There is no item with that id or name.")
            return false
        end
    end

    if table.contains(invalidIds, itemType:getId()) then
        return false
    end

    local keyNumber = 0
    local count = tonumber(split[2])
    if count then
        if itemType:isStackable() then
            count = math.min(10000, math.max(1, count))
        elseif itemType:isKey() then
            keyNumber = count
            count = 1
        elseif not itemType:isFluidContainer() then
            count = math.min(100, math.max(1, count))
        else
            count = math.max(0, count)
        end
    else
        if not itemType:isFluidContainer() then
            count = 1
        else
            count = 0
        end
    end

    local result = player:addItem(itemType:getId(), count)
    if result then
        if not itemType:isStackable() then
            if type(result) == "table" then
                for _, item in ipairs(result) do
                    item:decay()
                end
            else
                if itemType:isKey() then
                    result:setAttribute(ITEM_ATTRIBUTE_ACTIONID, keyNumber)
                end
                result:decay()
            end
        end
        --todo: implements player:getPosition()
        player:getPosition():sendMagicEffect(CONST_ME_MAGIC_GREEN)
    end

    return true
end

talkAction:separator(" ")
talkAction:register()
