--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| 	Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]


ITEM.name = "TFA Weapons"
ITEM.base = "base_weapons"
ITEM.description = "A Weapon."
ITEM.category = "Armes de mêlées"
ITEM.model = "models/weapons/w_pistol.mdl"
ITEM.class = "weapon_pistol"
ITEM.width = 2
ITEM.height = 2
ITEM.isWeapon = true
ITEM.isGrenade = false
ITEM.weaponCategory = "sidearm"
ITEM.useSound = "items/ammo_pickup.wav"

ITEM.atts = {}

function ITEM:GetDescription()
	local description = {self.description}
	return table.concat(description, "")
end

function ITEM:GetBaseInfo()
	local baseInfo = {}
	if (self.balanceCat) then
		baseInfo[#baseInfo + 1] = "Catégorie : "
        if (self.isMelee) then
            baseInfo[#baseInfo + 1] = "Mêlée"
        end
		if (CLIENT) then
			baseInfo[#baseInfo + 1] = "\nChance de critique : "
            if (self.isMelee) then
                baseInfo[#baseInfo + 1] = math.max(math.floor(ix.weapons:GetMeleeWeaponBaseHitChance(LocalPlayer():GetCharacter(), self.class) * ix.weapons:GetWeaponAimPenalty(self.class) * 100), 0)
            else
                baseInfo[#baseInfo + 1] = math.floor(ix.weapons:GetWeaponSkillMod(LocalPlayer():GetCharacter(), self.class) * ix.weapons:GetWeaponAimPenalty(self.class) * 100)
            end
            baseInfo[#baseInfo + 1] = "%%"
		end
	end

	return table.concat(baseInfo, "")
end

function ITEM:GetExtendedInfo()
	local extendedInfo = {}
    if (self.balanceCat) then
        if (self.isMelee) then
            extendedInfo[#extendedInfo + 1] = "Dégats : "
            extendedInfo[#extendedInfo + 1] = ix.weapons:GetMeleeWeaponBaseDamage(self.class)
        else
            extendedInfo[#extendedInfo + 1] = "Dégats : "
            extendedInfo[#extendedInfo + 1] = ix.weapons:GetWeaponBaseDamage(self.class)

            local min, max, bFlat = ix.weapons:GetWeaponSkillRequired(self.class)
            if (!bFlat) then
                extendedInfo[#extendedInfo + 1] = "\nSkill range : "
                extendedInfo[#extendedInfo + 1] = min.."-"..max
            else
                extendedInfo[#extendedInfo + 1] = "\nSkill required : "
                extendedInfo[#extendedInfo + 1] = min
            end

            local minR, effR = ix.weapons:GetWeaponEffectiveRanges(self.class)
            extendedInfo[#extendedInfo + 1] = "\nMinimum effective range: "
            extendedInfo[#extendedInfo + 1] = minR.."m"
            extendedInfo[#extendedInfo + 1] = "\nMaximum effective range: "
            extendedInfo[#extendedInfo + 1] = effR.."m"

            extendedInfo[#extendedInfo + 1] = "\nShots per action point: "
            extendedInfo[#extendedInfo + 1] = ix.weapons:GetWeaponNumShots(self.class)
            extendedInfo[#extendedInfo + 1] = "\nArmor Penetration: "
            extendedInfo[#extendedInfo + 1] = math.floor(ix.weapons:GetArmorPen(self.class) * 100).."%%"
        end
	end

	return table.concat(extendedInfo, "")
end

function ITEM:GetColorAppendix()
	if self.balanceCat then
		return {["blue"] = self:GetBaseInfo(), ["red"] = self:GetExtendedInfo()}
	end
end

function ITEM:OnRegistered()
    if (self.balanceCat and ix.weapons) then
        if (self.isMelee) then
            ix.weapons:RegisterMeleeWeapon(self.class, self.balanceCat)
        else
            ix.weapons:RegisterWeapon(self.class, self.balanceCat)
        end

        ix.weapons:RegisterWeaponExceptions(self.class, self.baseDamage, self.armorPen, self.aimPenalty, self.numShots)
    end
end

function ITEM:OnEquipWeapon(client, weapon)
    if (self:GetData("BioLocked") or self:GetData("tfa_atts") or !table.IsEmpty(self.atts)) then
        timer.Simple(0.5, function()
            weapon:SetNetVar("ixItemAtts", self.atts)

            if (!IsValid(weapon)) then return end
            weapon:InitAttachments()

            for _, v in pairs(self.atts) do
                if (self:GetData("tfa_default_atts_uneq", {})[v]) then continue end

                weapon:Attach(v)
            end

            if (self:GetData("tfa_atts")) then
                for _, v in pairs(self:GetData("tfa_atts")) do
                    if (istable(v) and v.att) then
                        weapon:Attach(v.att)
                    end
                end
            end

            if (self:GetData("BioLocked")) then
                weapon:SetNetVar("BioLocked", true)
            end
        end)
    end
end