-- annotation.lua contains EmmyLua annotations for cpp_function & cpp_variable\

function create_button(x, y, width, height, text) 
    return {
        x = x,
        y = y,
        width = width,
        height = height,
        text = text,
        hovered = false,
        was_pressed = false,
        onpressed = function() end
    }
end

function draw_button(button) 
    if button.hovered then
        Engine:setColor(Color.new(0, 255, 0))
    else
        Engine:setColor(Color.new(255, 0, 0))
    end
    Engine:fillRect(button.x, button.y, button.width, button.height)
    Engine:setColor(Color.new(0, 0, 0))
    Engine:drawText(button.text, button.x + 10, button.y + 10)
end

function is_mouse_in_button(button, x, y) 
    return x >= button.x and x <= button.x + button.width and y >= button.y and y <= button.y + button.height
end

testButton = create_button(100, 100, 100, 50, "Test Button")

function update_button(button) 
    if is_mouse_in_button(button, Engine:getMouseX(), Engine:getMouseY()) then
        button.hovered = true
        if Engine:isMouseLeftDown() and not button.was_pressed then
            button.onpressed()
            button.was_pressed = true
        elseif not Engine:isMouseLeftDown() then
            button.was_pressed = false
        end
    else
        button.hovered = false
        button.was_pressed = false
    end
end

--- the setup function
--- @return nil
function setup_window() 
    Engine:setTitle("Hello World new")
    Engine:setWidth(800)
    Engine:setHeight(600)
    Engine:setFrameRate(60)

    testButton.onpressed = function() 
        Engine:messageBox("Button Pressed")
    end
end

--- the set_keylist function
--- @return string
function set_keylist() 
    return "WASD"
end

--- the update function
--- @param Engine GameEngine # The GameEngine instance.
--- @return nil
function update() 
    update_button( testButton)
end


--- the draw function
--- @return nil
function draw()
    Engine:setColor(Color.new(0, 0, 0))
    Engine:fillScreen(Color.new(255, 255, 255))

    draw_button(testButton)
end