local world = require("world")

local camera = {
    pan = {
        x = 0,
        y = 0,
    },
}

local expireBelowScreen =
    world:filteredSystem("expireBelowScreen", { position = T.XyPair, expireBelowScreenBy = T.number })

local focusPriority = {}

cameraPanSystem = world:filteredSystem("cameraPan", { focusPriority = T.number, position = T.XyPair }, function(e, _)
    if e.focusPriority >= focusPriority.priority then
        focusPriority.position = e.position
    end
end)

function cameraPanSystem.preProcess()
    focusPriority.priority = 0
    focusPriority.position = { x = 0, y = 0 }
end

function cameraPanSystem:postProcess()
    camera.pan.x = math.max(0, focusPriority.position.x - 200)
    camera.pan.y = math.min(0, focusPriority.position.y - 120)
    love.graphics.translate(0, -camera.pan.y)

    for _, entity in pairs(expireBelowScreen.entities) do
        if entity.position.y - (camera.pan.y + 240) > entity.expireBelowScreenBy then
            self.world:removeEntity(entity)
        end
    end
end