from typing import Any

from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup
from aiogram.utils.keyboard import InlineKeyboardBuilder

from bot.services.texts import texts


async def main_menu(menu_items: list[dict[str, Any]]) -> InlineKeyboardMarkup:
    builder = InlineKeyboardBuilder()
    for item in menu_items:
        label = await texts.text(str(item.get("label", "")))
        builder.button(text=label, callback_data=f"menu:{item.get('action')}")
    builder.adjust(2)
    return builder.as_markup()


async def back_button(callback_data: str = "menu:main") -> InlineKeyboardButton:
    return InlineKeyboardButton(text=await texts.text("btn_back"), callback_data=callback_data)


async def back_keyboard(callback_data: str = "menu:main") -> InlineKeyboardMarkup:
    return InlineKeyboardMarkup(inline_keyboard=[[await back_button(callback_data)]])


async def main_menu_keyboard() -> InlineKeyboardMarkup:
    return InlineKeyboardMarkup(
        inline_keyboard=[
            [InlineKeyboardButton(text=await texts.text("btn_main_menu"), callback_data="menu:main")]
        ]
    )


async def cancel_keyboard(callback_data: str = "menu:main") -> InlineKeyboardMarkup:
    return InlineKeyboardMarkup(
        inline_keyboard=[
            [InlineKeyboardButton(text=await texts.text("btn_cancel"), callback_data=callback_data)]
        ]
    )
