if !SERVER then return end

local function FindValidPizzaDough(pos,ply,ing)
    local ValidPizzaDough = nil
    for k, v in pairs(ents.FindInSphere( pos, 45) ) do
        if(v:GetClass() == "zpizmak_pizza" && v:Needs_Ingredient(ing:GetIngredient_Type()))then
            ValidPizzaDough =  v
            break
        end
    end
    return ValidPizzaDough
end

local function FindValidCustomer(pos)
    local validWorktable = nil
    for k, v in pairs(ents.FindInSphere( pos, 45) ) do
        if(v:GetClass() == "zpizmak_customertable" )then
            validWorktable =  v
            break
        end
    end
    return validWorktable
end

//ItemDrop
local function zpizmak_pizzadrop(ply,ent)

    if (ent:GetClass() == "zpizmak_pizza") then
        if (zpizmak.f.IsOwner(ply, ent) or zpizmak.config.EquipmentSharing) then
            if (zpizmak.f.JobRestriction(ply)) then
                if (ent:GetCurrentState_Index() >= 3) then
                    local customerTable = FindValidCustomer(ent:GetPos() + ent:GetUp() * 15)

                    if (IsValid(customerTable)) then
                        customerTable:ServPizza(ent, ply)
                    end
                elseif (ent:GetCurrentState_Index() == 1) then
                    for k, v in pairs(ents.FindInSphere(ent:GetPos(), 45)) do
                        if (v:GetClass() == "zpizmak_ingredient") then
                            ent:Add_Ingredient(v)
                        end
                    end
                elseif (ent:GetCurrentState_Index() == 2) then
                    for k, v in pairs(ents.FindInSphere(ent:GetPos(), 45)) do
                        if (v:GetClass() == "zpizmak_oven") then
                            local freeID = v:Has_FreeSpot()

                            if (freeID ~= nil) then
                                v:PlacePizza(ent, freeID)
                                break
                            end
                        end
                    end
                end
            end
        end
    end


    if (string.sub(ent:GetClass(), 1, 11) == "zpizmak_ing") then
        if (zpizmak.f.IsOwner(ply, ent) or zpizmak.config.EquipmentSharing) then
            if (zpizmak.f.JobRestriction(ply)) then
                local ValidPizzaDough = FindValidPizzaDough(ent:GetPos() + ent:GetUp() * 15, ply, ent)

                if IsValid(ValidPizzaDough) then
                    if (ValidPizzaDough:GetCurrentState_Index() == 1) then
                        ValidPizzaDough:Add_Ingredient(ent)
                    end
                end
            end
        end
    end
end
hook.Add("GravGunOnDropped", "zpizmak_pizzadrop", zpizmak_pizzadrop)
