---@meta
--- This file provides type annotations for Lua scripts interacting with C++ via SOL2.


--- The Color class exposed from C++
--- @class Color
--- @field r number # The red component of the color.
--- @field g number # The green component of the color.
--- @field b number # The blue component of the color.
Color = {}

--- constructor
--- @param r number # The red component of the color.
--- @param g number # The green component of the color.
--- @param b number # The blue component of the color.
--- @return Color
function Color.new(r, g, b) end


--- The Bitmap class exposed from C++
--- @class Bitmap
--- @field filename string # The filename of the bitmap.
Bitmap = {}

--- constructor
--- @param filename string # The filename of the bitmap.
--- @return Bitmap
function Bitmap.new(filename) end

--- Sets the transparency color
--- @param color Color # The color to set as transparent.
--- @return nil
function Bitmap:SetTransparencyColor(color) end

--- Sets the Opacity
--- @param opacity number # The opacity to set.
--- @return nil
function Bitmap:SetOpacity(opacity) end

--- Gets if the bitmap exists
--- @return boolean # True if the bitmap exists, false otherwise.
function Bitmap:Exists() end

--- Gets the width of the bitmap
--- @return number # The width of the bitmap.
function Bitmap:GetWidth() end

--- Gets the height of the bitmap
--- @return number # The height of the bitmap.
function Bitmap:GetHeight() end


--- The Textbox class exposed from C++
--- @class Textbox
--- @field text string # The text of the textbox.
Textbox = {}

--- constructor
--- @param text string # The text of the textbox.
--- @return Textbox
function Textbox.new(text) end

--- Set the bounds of the textbox
--- @param x number # The x coordinate of the textbox.
--- @param y number # The y coordinate of the textbox.
--- @param width number # The width of the textbox.
--- @param height number # The height of the textbox.
--- @return nil
function Textbox:SetBounds(x, y, width, height) end

--- Set the text of the textbox
--- @param text string # The text of the textbox.
--- @return nil
function Textbox:SetText(text) end

--- Sets the background color of the textbox
--- @param color Color # The color to set as the background.
--- @return nil
function Textbox:SetBackgroundColor(color) end

--- Sets the foreground color of the textbox
--- @param color Color # The color to set as the foreground.
--- @return nil
function Textbox:SetForegroundColor(color) end

--- Sets the textbox to be enabled
--- @param enabled boolean # True if the textbox is enabled, false otherwise.
--- @return nil
function Textbox:SetEnabled(enabled) end

--- Shows the textbox
--- @return nil
function Textbox:Show() end

--- Hides the textbox
--- @return nil
function Textbox:Hide() end

--- Gets the text in the textbox
--- @return string # The text in the textbox.
function Textbox:GetText() end



--- The Game engine class exposed from C++
--- @class Engine
GameEngine = {}

--- @type
GameEngine = GameEngine


---Sets the title of the window.
---@param title string # The new title.
---@return nil
function GameEngine:setTitle(title) end

--- Gets the title of the window.
--- @return string # The title of the window.
function GameEngine:getName() end

--- Sets the width of the window.
--- @param width number # The new width.
--- @return nil
function GameEngine:setWidth(width) end

--- Gets the window width.
--- @return number # The width of the window.
function GameEngine:getWidth() end

--- Gets the window height.
--- @return number # The height of the window.
function GameEngine:getHeight() end

--- Sets the height of the window.
--- @param height number # The new height.
--- @return nil
function GameEngine:setHeight(height) end

--- Sets the frame rate of the window.
--- @param frameRate number # The new frame rate.
--- @return nil
function GameEngine:setFrameRate(frameRate) end

--- Quits the game
--- @return nil
function GameEngine:quit() end

--- Sets the drawing color
--- @param color Color # The new color.
--- @return nil
function GameEngine:setColor(color) end

--- Fills the screen
--- @param color Color # The color to fill the screen with.
--- @return nil
function GameEngine:fillScreen(color) end

--- message box
--- @param message string # The message to display.
--- @return nil
function GameEngine:messageBox(message) end


--- Draw a bitmap
--- @param bitmap Bitmap # The bitmap to draw.
--- @param x number # The x coordinate of the bitmap.
--- @param y number # The y coordinate of the bitmap.
function GameEngine:drawBitmap(bitmap, x, y) end

--- Draws a rectangle
--- @param x number # The x coordinate of the rectangle.
--- @param y number # The y coordinate of the rectangle.
--- @param width number # The width of the rectangle.
--- @param height number # The height of the rectangle.
--- @return nil
function GameEngine:drawRect(x, y, width, height) end


--- fills a rectangle
--- @param x number # The x coordinate of the rectangle.
--- @param y number # The y coordinate of the rectangle.
--- @param width number # The width of the rectangle.
--- @param height number # The height of the rectangle.
--- @return nil
function GameEngine:fillRect(x, y, width, height) end

--- draws an oval
--- @param x number # The x coordinate of the oval.
--- @param y number # The y coordinate of the oval.
--- @param width number # The width of the oval.
--- @param height number # The height of the oval.
function GameEngine:drawOval(x, y, width, height) end

--- fills an oval
--- @param x number # The x coordinate of the oval.
--- @param y number # The y coordinate of the oval. 
--- @param width number # The width of the oval. 
--- @param height number # The height of the oval.
function GameEngine:fillOval(x, y, width, height) end

--- draws text
--- @param text string # The text to draw.
--- @param x number # The x coordinate of the text.
--- @param y number # The y coordinate of the text.
--- @return nil
function GameEngine:drawText(text, x, y,) end

--- Checks if a key is pressed
--- @param key string # The key to check.
--- @return boolean # True if the key is pressed, false otherwise.
function GameEngine:isKeyDown(key) end


--- Gets the mouse Position X
--- @return number # The x coordinate of the mouse.
function GameEngine:getMouseX() end


--- Gets the mouse Position Y
--- @return number # The y coordinate of the mouse.
function GameEngine:getMouseY() end

--- Get if the left mouse button isKeyDown
--- @return boolean # True if the left mouse button is pressed, false otherwise.
function GameEngine:isMouseLeftDown() end;

--- Get if the right mouse button isKeyDown
--- @return boolean # True if the right mouse button is pressed, false otherwise.
function GameEngine:isMouseRightDown() end;

--- Preform a Get Request
--- @param url string # The url to get.
--- @param data string # The data to get.
--- @return string # The response from the server.
function GameEngine:getRequest(url, data) end

--- overload without data
--- Preform a Get Request
--- @param url string # The url to get.
--- @return string # The response from the server.
function GameEngine:getRequest(url) end


--- Preform a Post Request
--- @param url string # The url to post.
--- @param data string # The data to post.
function GameEngine:postRequest(url, data) end

--- Opens a dialog to enter a string
--- @return string # The string entered by the user.
function GameEngine:GetString() end