import aiosqlite
from aiogram.utils.keyboard import InlineKeyboardBuilder
from aiogram.types import InlineKeyboardButton
from config import DB_PATH

VALID_STYLES = {"primary", "success", "danger"}

def clean_style(style_str: str | None) -> str | None:
    if style_str in VALID_STYLES:
        return style_str
    return None

async def get_button_info(key: str, default_text: str, default_style: str | None = None) -> tuple[str, str | None]:
    async with aiosqlite.connect(DB_PATH) as db:
        async with db.execute("SELECT text, style FROM bot_buttons WHERE key = ?", (key,)) as cursor:
            row = await cursor.fetchone()
            if row:
                return row[0], clean_style(row[1])
            return default_text, clean_style(default_style)

async def get_main_menu_keyboard(is_admin: bool = False):
    builder = InlineKeyboardBuilder()

    async with aiosqlite.connect(DB_PATH) as db:
        async with db.execute("SELECT id, name, style FROM categories ORDER BY position ASC, id ASC") as cursor:
            categories = await cursor.fetchall()

    for cat_id, cat_name, cat_style in categories:
        builder.row(
            InlineKeyboardButton(
                text=cat_name,
                callback_data=f"cat_{cat_id}",
                style=clean_style(cat_style)
            )
        )

    txt_orders, st_orders = await get_button_info("btn_orders", "📦 سفارشات من")
    txt_charge, st_charge = await get_button_info("btn_charge", "💳 شارژ حساب", "success")
    txt_vpns, st_vpns = await get_button_info("btn_vpns", "🌐 وی‌پی‌ان‌های من", "primary")
    txt_ref, st_ref = await get_button_info("btn_referral", "💰 کسب درآمد", "success")
    txt_support, st_support = await get_button_info("btn_support", "🎫 پشتیبانی و تیکت")
    txt_profile, st_profile = await get_button_info("btn_profile", "👤 حساب کاربری")
    txt_admin, st_admin = await get_button_info("btn_admin", "⚙️ پنل مدیریت ادمین", "danger")

    builder.row(
        InlineKeyboardButton(text=txt_charge, callback_data="charge_wallet", style=st_charge),
        InlineKeyboardButton(text=txt_orders, callback_data="my_orders", style=st_orders)
    )
    builder.row(
        InlineKeyboardButton(text=txt_vpns, callback_data="my_vpn_accounts", style=st_vpns),
        InlineKeyboardButton(text=txt_ref, callback_data="referral_info", style=st_ref)
    )
    builder.row(
        InlineKeyboardButton(text=txt_support, callback_data="support_tickets", style=st_support),
        InlineKeyboardButton(text=txt_profile, callback_data="my_profile", style=st_profile)
    )

    if is_admin:
        builder.row(
            InlineKeyboardButton(text=txt_admin, callback_data="admin_panel", style=st_admin)
        )

    return builder.as_markup()

def get_admin_panel_keyboard():
    builder = InlineKeyboardBuilder()
    builder.row(
        InlineKeyboardButton(text="📂 مدیریت دسته‌بندی‌ها", callback_data="admin_manage_cats", style="success"),
        InlineKeyboardButton(text="📦 مدیریت محصولات", callback_data="admin_manage_prods", style="success")
    )
    builder.row(
        InlineKeyboardButton(text="👮‍♂️ مدیریت ادمین‌ها", callback_data="admin_manage_admins", style="primary"),
        InlineKeyboardButton(text="👥 گروه بررسی رسیدها", callback_data="admin_set_receipt_group", style="primary")
    )
    builder.row(
        InlineKeyboardButton(text="🏷️ مدیریت کدهای تخفیف", callback_data="admin_manage_discounts", style="primary"),
        InlineKeyboardButton(text="📢 ارسال پیام همگانی", callback_data="admin_broadcast", style="primary")
    )
    builder.row(
        InlineKeyboardButton(text="📊 آمار و گزارشات کل", callback_data="admin_stats", style="primary"),
        InlineKeyboardButton(text="⚙️ مدیریت روش‌های پرداخت", callback_data="admin_payment_settings")
    )
    builder.row(
        InlineKeyboardButton(text="📣 کانال گزارش تراکنش‌ها", callback_data="admin_set_log_channel"),
        InlineKeyboardButton(text="📢 کانال‌های اسپانسری (قفل)", callback_data="admin_manage_sponsors")
    )
    builder.row(
        InlineKeyboardButton(text="💳 بررسی رسیدها", callback_data="admin_check_receipts"),
        InlineKeyboardButton(text="🎫 مدیریت تیکت‌ها", callback_data="admin_manage_tickets")
    )
    builder.row(
        InlineKeyboardButton(text="📋 مدیریت سفارشات", callback_data="admin_manage_orders"),
        InlineKeyboardButton(text="💰 شارژ دستی کاربر", callback_data="admin_manual_charge")
    )
    builder.row(
        InlineKeyboardButton(text="🎯 تنظیم درصد پورسانت دعوت", callback_data="admin_set_ref_percent"),
        InlineKeyboardButton(text="🎨 ویرایش متن و رنگ دکمه‌ها", callback_data="admin_edit_buttons")
    )
    builder.row(
        InlineKeyboardButton(text="🔙 بازگشت به منوی اصلی", callback_data="back_to_main", style="danger")
    )
    return builder.as_markup()