local mad = require "MoonAdditions"

-- Constants
local MENU_TITLE = "Main Menu"
local MENU_X = 45
local MENU_Y = 240
local MENU_TITLE_SIZE = 1.40
local MENU_ITEM_HEIGHT = 17
local MENU_ITEM_WIDTH = 125
local MENU_WIDTH = 190
local MENU_ITEM_SPACING = 1  -- Additional space between items
local MENU_COLOR = {r = 153, g = 238, b = 153, a = 255}
local TEXT_COLOR = {r = 255, g = 255, b = 255, a = 255}
local CURSOR_HOVER_COLOR = {r = 255, g = 170, b = 255, a = 255}
local DESCRIPTION_COLOR = {r = 255, g = 230, b = 100, a = 255} -- Yellow color for descriptions
local DESCRIPTION_FONT_SIZE = 0.75  -- Smaller font size for descriptions

-- Define menu items, their actions, and descriptions
local menuItems = {
    {label = "Recording", action = function() printStringNow("Recording action triggered!", 500) end, description = "Start audio recording"},
    {label = "Playback", action = function() printStringNow("Playback action triggered!", 500) end, description = "Play recorded audio"},
    {label = "Pause", action = function() printStringNow("Pause action triggered!", 500) end, description = "Pause current action"},
    {label = "Car slot", action = function() printStringNow("Car slot action triggered!", 500) end, description = "Manage car storage"},
    {label = "Save/Load", action = function() printStringNow("Save/Load action triggered!", 500) end, description = "Save or load settings"},
    {label = "Triggers", action = function() printStringNow("Triggers action triggered!", 500) end, description = "Configure trigger actions"},
    {label = "Options", action = function() printStringNow("Options action triggered!", 500) end, description = "Adjust settings"}
}

-- Draw a text with given attributes
local function drawText(text, x, y, size, color, isHovered)
    local style = mad.font_style.FONT_SUBTITLES
    local width = size * 0.58
    local height = size * 1.02
    local align = mad.font_align.LEFT
    local wrap = MENU_WIDTH
    local proportional = true
    local justify = false  

    local textColor = isHovered and CURSOR_HOVER_COLOR or color
    mad.draw_text(text, x, y, style, width, height, align, wrap, proportional, justify, 
                  textColor.r, textColor.g, textColor.b, textColor.a, 
                  1, 0, 0, 0, 0, 255, 0, 0, 0, 0)
end

-- Check if a point is within a rectangular area
local function isPointInArea(pointX, pointY, rectX, rectY, rectWidth, rectHeight)
    return pointX >= rectX and pointX <= rectX + rectWidth and
           pointY >= rectY and pointY <= rectY + rectHeight
end

-- Main function
function main()
    while not isPlayerPlaying(PLAYER_HANDLE) do wait(100) end
    wait(100)

    local wasLMBDown = false

    while true do
        wait(0)

        drawText(MENU_TITLE, MENU_X, MENU_Y, MENU_TITLE_SIZE, MENU_COLOR, false)

        local cursorX, cursorY = getCursorPos()
        local isLMBDown = isKeyDown(1)  -- Check if the left mouse button is pressed
        local currentDescription = ""

        for i, item in ipairs(menuItems) do
            local itemY = MENU_Y + 10 + (MENU_ITEM_HEIGHT + MENU_ITEM_SPACING) * i
            local isHovered = isPointInArea(cursorX, cursorY, MENU_X, itemY, MENU_ITEM_WIDTH, MENU_ITEM_HEIGHT)

            -- Draw the menu item
            drawText(item.label, MENU_X, itemY, 1, TEXT_COLOR, isHovered)

            -- Update the current description based on the hovered item
            if isHovered then
                currentDescription = item.description
            end

            if isHovered and isLMBDown and not wasLMBDown then
                item.action()
            end
        end

        -- Draw the current description under the last menu item with smaller size
        local descriptionY = MENU_Y + 15 + (MENU_ITEM_HEIGHT + MENU_ITEM_SPACING) * (#menuItems + 1)
        drawText(currentDescription, MENU_X, descriptionY, DESCRIPTION_FONT_SIZE, DESCRIPTION_COLOR, false)

        wasLMBDown = isLMBDown  -- Update the LMB state
    end
end

сделай этот код более расширяемым и добавь в него поддержку сразу нескольких возможных меню, больше ничего не меняй