AddCSLuaFile()

ENT.Type                     = "anim"
ENT.Base                     = "base_entity"
ENT.RenderGroup              = RENDERGROUP_TRANSLUCENT

ENT.PrintName                = "Dropped Magazine"
ENT.Category                 = ""

ENT.Spawnable                = false
ENT.Model                    = ""
ENT.FadeTime = 5
ENT.CanHavePrints = true -- TTT

ENT.ImpactSounds = {
    ["pistol"] = {
        "TacRP/weapons/drop_magazine_pistol-1.wav",
        "TacRP/weapons/drop_magazine_pistol-2.wav",
        "TacRP/weapons/drop_magazine_pistol-3.wav",
        "TacRP/weapons/drop_magazine_pistol-4.wav",
        "TacRP/weapons/drop_magazine_pistol-5.wav",
    },
    ["metal"] = {
        "TacRP/weapons/drop_magazine_metal-1.wav",
        "TacRP/weapons/drop_magazine_metal-2.wav",
        "TacRP/weapons/drop_magazine_metal-3.wav",
        "TacRP/weapons/drop_magazine_metal-4.wav",
    },
    ["plastic"] = {
        "TacRP/weapons/drop_magazine_plastic-1.wav",
        "TacRP/weapons/drop_magazine_plastic-2.wav"
    },
    ["bullet"] = {
        "player/pl_shell1.wav",
        "player/pl_shell2.wav",
        "player/pl_shell3.wav"
    },
    ["shotgun"] = {
        "weapons/fx/tink/shotgun_shell1.wav",
        "weapons/fx/tink/shotgun_shell2.wav",
        "weapons/fx/tink/shotgun_shell3.wav",
    },
    ["spoon"] = {
        "TacRP/weapons/grenade/spoon_bounce-1.wav",
        "TacRP/weapons/grenade/spoon_bounce-2.wav",
        "TacRP/weapons/grenade/spoon_bounce-3.wav",
    }
}

ENT.ImpactType = "pistol"

ENT.AmmoType = nil
ENT.AmmoCount = nil

function ENT:Initialize()
    self:SetModel(self.Model)

    if SERVER then
        self:PhysicsInit(SOLID_VPHYSICS)
        self:SetMoveType(MOVETYPE_VPHYSICS)
        self:SetSolid(SOLID_VPHYSICS)
        self:SetCollisionGroup(COLLISION_GROUP_DEBRIS)
        self:SetUseType(SIMPLE_USE)

        self:PhysWake()

        local phys = self:GetPhysicsObject()
        if !phys:IsValid() then
            self:PhysicsInitBox(Vector(-1, -1, -1), Vector(1, 1, 1))
        end
    end

    self.SpawnTime = CurTime()
    if engine.ActiveGamemode() == "terrortown" and TacRP.ConVars["ttt_magazine_dna"]:GetBool() then
        self.FadeTime = 600
        if SERVER then
            self.fingerprints = {}
            table.insert(self.fingerprints, self:GetOwner())
        end
    end

    if self.AmmoType and self.AmmoCount then
        self.FadeTime = math.max(self.FadeTime, 120)
        self:SetOwner(NULL) -- Owner can't +USE their own entities
    end
end

function ENT:PhysicsCollide(colData, collider)
    if colData.DeltaTime < 0.5 then return end

    local tbl = self.ImpactSounds[self.ImpactType]

    local snd = ""

    if tbl then
        snd = table.Random(tbl)
    end

    self:EmitSound(snd)
end

function ENT:Think()
    if !self.SpawnTime then
        self.SpawnTime = CurTime()
    end

    if SERVER and (self.SpawnTime + self.FadeTime) <= CurTime() then

        self:SetRenderFX( kRenderFxFadeFast )

        if (self.SpawnTime + self.FadeTime + 1) <= CurTime() then

            if IsValid(self:GetPhysicsObject()) then
                self:GetPhysicsObject():EnableMotion(false)
            end

            if SERVER then
                if (self.SpawnTime + self.FadeTime + 1.5) <= CurTime() then
                    self:Remove()
                    return
                end
            end
        end
    end
end

function ENT:Use(ply)
    if self.AmmoType and (self.AmmoCount or 0) > 0 and (self.SpawnTime + 0.5 <= CurTime()) then
        local given = ply:GiveAmmo(self.AmmoCount, self.AmmoType)
        self.AmmoCount = self.AmmoCount - given
        if self.AmmoCount <= 0 then
            self:Remove()
        end
    end
end

function ENT:DrawTranslucent()
    self:Draw()
end

function ENT:Draw()
    self:DrawModel()
end
