-- Патч для tacrp_att: корректный подбор и возможность удаления суперадминами
-- Проблема: если free_atts = true, GiveAtt блокирует подбор с сообщением
-- "All attachments are free! This is not necessary!" и обвес не удаляется.

if not SERVER then return end

-- Таблица групп, имеющих админские права для поднятия сущностей
local AdminPrivs = {
    ["superadmin"] = true,
    ["curator"] = true,
    ["admin"] = true,
    ["owner"] = true,
    ["projectteam"] = true,
    ["teh.admin"] = true,
}


-- Ждём загрузки всех энтитей перед патчем
hook.Add("InitPostEntity", "MRP_PatchTacRPAtt", function()
    -- Идём по всем зарегистрированным энтитям и патчим те, что начинаются на tacrp_att
    for classname, meta in pairs(scripted_ents.GetList()) do
        if string.StartWith(classname, "tacrp_att") and meta.t then
            local ENT = meta.t

            ENT.GiveAtt = function(self, ply)
                if not self.AttToGive then return end

                -- Проверка lock_atts: если включён и обвес уже есть — не выдаём
                if TacRP and TacRP.ConVars and TacRP.ConVars["lock_atts"] and
                   TacRP.ConVars["lock_atts"]:GetBool() and
                   TacRP:PlayerGetAtts(ply, self.AttToGive) > 0 then
                    ply:PrintMessage(HUD_PRINTTALK, "У вас уже есть этот обвес!")
                    return
                end

                -- Выдаём обвес
                if TacRP then
                    local given = TacRP:PlayerGiveAtt(ply, self.AttToGive, 1)
                    if given then
                        TacRP:PlayerSendAttInv(ply)
                        self:EmitSound("TacRP/weapons/flashlight_on.wav")
                        self:Remove()
                    end
                end
            end

            -- Патчим Use чтобы не падал если TacRP не загружен
            ENT.Use = function(self, ply)
                if not ply:IsPlayer() then return end
                self:GiveAtt(ply)
            end
        end
    end

    print("[MRP] tacrp_att patched: pickup fix applied to all derived attachments")
end)

-- Хук для удаления tacrp_att через physgun для суперадминов
hook.Add("PhysgunPickup", "MRP_AllowAttPickup", function(ply, ent)
    if string.StartWith(ent:GetClass(), "tacrp_att") then
        -- Разрешаем суперадминам поднимать и удалять обвесы
        if ply:IsSuperAdmin() or AdminPrivs and AdminPrivs[ply:GetUserGroup()] then
            return true
        end
    end
end)

-- Хук для удаления через ToolGun (суперадмин right-click)
hook.Add("CanTool", "MRP_AllowAttRemove", function(ply, tr, tool)
    if tool == "remover" then
        local ent = tr.Entity
        if IsValid(ent) and string.StartWith(ent:GetClass(), "tacrp_att") then
            if ply:IsSuperAdmin() or AdminPrivs and AdminPrivs[ply:GetUserGroup()] then
                return true
            end
        end
    end
end)
