-- ForageWagonPatch.lua
-- Verhindert automatischen FillType-Wechsel und Aufnahme von falschem Material

local modName = g_currentModName

local function patchForageWagon()
    -- Patch 1: Verhindere FillType-Wechsel
    local originalGetFillUnitSupportsToolType = ForageWagon.getFillUnitSupportsToolType
    function ForageWagon:getFillUnitSupportsToolType(superFunc, fillUnitIndex, toolType)
        local spec = self.spec_forageWagon
        
        if fillUnitIndex == spec.fillUnitIndex then
            local fillType = self:getFillUnitFillType(fillUnitIndex)
            local supportedFillTypes = spec.supportedToolTypes[toolType]

            if supportedFillTypes ~= nil then
                if supportedFillTypes[fillType] == nil then
                    local fillLevel = self:getFillUnitFillLevel(fillUnitIndex)
                    
                    if fillLevel <= 0 then
                        -- Komplett leer - erlaube Wechsel
                        for fillTypeIndex, _ in pairs(supportedFillTypes) do
                            self:addFillUnitFillLevel(self:getOwnerFarmId(), fillUnitIndex, 0, fillTypeIndex, ToolType.UNDEFINED, nil)
                            break
                        end
                        return true
                    else
                        -- Noch Material vorhanden - KEINE Unterstützung für diesen ToolType
                        return false
                    end
                end

                return true
            end
        end

        return superFunc(self, fillUnitIndex, toolType)
    end
    
    -- Patch 2: Verhindere Pickup wenn FillType nicht passt
    local originalProcessForageWagonArea = ForageWagon.processForageWagonArea
    function ForageWagon:processForageWagonArea(workArea, ...)
        local spec = self.spec_forageWagon
        local fillLevel = self:getFillUnitFillLevel(spec.fillUnitIndex)
        local currentFillType = self:getFillUnitFillType(spec.fillUnitIndex)
        
        -- Wenn Material vorhanden ist und forcedFillType nicht gesetzt oder anders ist
        if fillLevel > 0 then
            local forcedType = spec.workAreaParameters.forcedFillType
            if forcedType ~= FillType.UNKNOWN and forcedType ~= currentFillType then
                -- Verhindere Pickup von falschem Material
                workArea.lastPickUpLiters = 0
                workArea.pickupParticlesActive = false
                return 0, 0
            end
        end
        
        return originalProcessForageWagonArea(self, workArea, ...)
    end
    
    print(string.format("[%s] ForageWagon patched - FillType switch prevented when not empty", modName or "ForageWagonPatch"))
end

local function init()
    if ForageWagon ~= nil then
        patchForageWagon()
    else
        print(string.format("[%s] ERROR: ForageWagon not found!", modName or "ForageWagonPatch"))
    end
end

Mission00.loadMission00Finished = Utils.appendedFunction(Mission00.loadMission00Finished, init)