local world = require("world")

---@type KeyState
local keyState = {}

local keyInputSystem = world:filteredSystem("keyInput", { canReceiveKeys = T.marker }, function(e, _, system)
    e.keyState = keyState
    system.world:addEntity(e)
end)

function keyInputSystem:preProcess()
    if #self.entities == 0 then
        return
    end
end

function love.keypressed(key, _, _)
    keyState[key] = true
end

-- function ClearKeyState()
--     for key in pairs(keyState) do
--         keyState[key] = nil
--     end
-- end

-- local mouse = world:filteredSystem("mouse", { mouseKeyPress = { position = T.XyPair, key = T.number } })
--
-- function MouseJustPressed(key, clear)
--     clear = clear ~= nil and clear or true
--     for _, event in pairs(mouse.entities) do
--         if event.mouseKeyPress and event.mouseKeyPress.key == key then
--             if clear then
--                 event.mouseKeyPress = nil
--                 world:removeEntity(event)
--             end
--             return true
--         end
--     end
--     return false
-- end
--
-- local mouseX, mouseY = -9999, -9999
--
-- function love.mousemoved(x, y)
--     mouseX, mouseY = x, y
-- end

function love.mousepressed(x, y, key)
    world:addEntity({
        mouseKeyPress = {
            position = {
                x = x,
                y = y,
            },
            key = key,
        },
        liveForNFrames = 1,
    })
end