"""
Dynamic admin product panel keyboards.

Builds inline keyboards from live database data using aiogram's
InlineKeyboardBuilder and the strongly-typed ProductCallback.

All labels in Persian (فارسی).

Buttons are CLASSIC plain-text buttons — emojis come from the shared list in
utils/emojis.py via ``get_plain_emoji()``.
"""

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

from keyboards.callback_data import ProductCallback
from utils.emojis import get_plain_emoji


def product_list_kb(products: list[dict]) -> InlineKeyboardMarkup:
    """Build an inline keyboard listing all products with their current prices.

    Each button shows: "📦 Label — $XX.XX"
    Clicking it triggers ProductCallback(action="select", product_key=...).

    Args:
        products: list of dicts with keys: product_key, label, usd_price
    """
    builder = InlineKeyboardBuilder()

    for p in products:
        price_str = f"${p['usd_price']:.2f}"
        text = f"{get_plain_emoji('box')} {p['label']} — {price_str}"
        builder.button(
            text=text,
            callback_data=ProductCallback(
                action="select",
                product_key=p["product_key"],
            ).pack(),
        )

    # One button per row for readability
    builder.adjust(1)

    # Add "🔙 بازگشت به پنل" at the bottom
    builder.row(
        InlineKeyboardButton(
            text=f"{get_plain_emoji('back_arrow')} بازگشت به پنل",
            callback_data="admin:panel",
        )
    )

    return builder.as_markup()


def product_detail_kb(product_key: str, label: str, usd_price: float) -> InlineKeyboardMarkup:
    """Build the detail view for a single product with an edit button.

    Shows:
        📦 محصول: {label}
        💰 قیمت فعلی: ${usd_price:.2f}

    Plus an "✏️ ویرایش قیمت" button.
    """
    builder = InlineKeyboardBuilder()

    builder.button(
        text=f"{get_plain_emoji('pencil')} ویرایش قیمت",
        callback_data=ProductCallback(
            action="edit",
            product_key=product_key,
        ).pack(),
    )

    builder.row(
        InlineKeyboardButton(
            text=f"{get_plain_emoji('back_arrow')} بازگشت به لیست",
            callback_data="admin:prices",
        )
    )

    return builder.as_markup()


def product_edit_success_kb() -> InlineKeyboardMarkup:
    """Keyboard shown after a successful price update.

    Two navigation options:
        🔙 بازگشت به لیست — returns to the full product list (live DB prices)
        🔙 بازگشت به پنل  — returns to the admin dashboard
    """
    return InlineKeyboardMarkup(inline_keyboard=[
        [_r_button("back_arrow", "بازگشت به لیست", "admin:prices")],
        [_r_button("home", "بازگشت به پنل", "admin:panel")],
    ])


def _r_button(text_key: str, text: str, cb: str) -> InlineKeyboardButton:
    """Build a classic inline button: plain list emoji + label + callback."""
    return InlineKeyboardButton(text=f"{get_plain_emoji(text_key)} {text}", callback_data=cb)