"""Language selection handler for Bobi v3.0."""
from __future__ import annotations

import logging

from telegram import InlineKeyboardButton, InlineKeyboardMarkup, Update
from telegram.constants import ParseMode
from telegram.ext import ContextTypes

from bot import i18n
from bot.persian_router import register_mixed

logger = logging.getLogger(__name__)


async def lang_cmd(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    """Show language selection menu."""
    user = update.effective_user
    if not user:
        return
    current_lang = await i18n.get_user_lang(user.id)
    languages = i18n.get_available_languages()
    keyboard = []
    for lang in languages:
        mark = "✅ " if lang["code"] == current_lang else ""
        keyboard.append([
            InlineKeyboardButton(
                f"{mark}{lang['native']} ({lang['name']})",
                callback_data=f"lang_set:{lang['code']}",
            )
        ])
    keyboard.append([InlineKeyboardButton(i18n.t("close", current_lang), callback_data="lang_close")])
    text = i18n.t("language", current_lang) + ":\n" + "\n".join(
        f"{'✅' if l['code'] == current_lang else '🔘'} {l['native']}"
        for l in languages
    )
    await update.message.reply_text(
        f"🌐 <b>{text}</b>",
        parse_mode=ParseMode.HTML,
        reply_markup=InlineKeyboardMarkup(keyboard),
    )


async def lang_callback(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    """Handle language selection callback."""
    query = update.callback_query
    await query.answer()
    user = update.effective_user
    if not user:
        return
    data = query.data
    if data == "lang_close":
        try:
            await query.message.delete()
        except Exception:
            pass
        return
    if data.startswith("lang_set:"):
        lang_code = data.split(":", 1)[1]
        await i18n.set_user_lang(user.id, lang_code)
        await query.edit_message_text(
            i18n.t("language_changed", lang_code),
            parse_mode=ParseMode.HTML,
        )


def register(app) -> None:
    register_mixed(
        app,
        {"lang": lang_cmd, "language": lang_cmd, "setlang": lang_cmd},
        {"زبان": lang_cmd, "تغییر زبان": lang_cmd, "عوض کردن زبان": lang_cmd, "زبان ربات": lang_cmd},
    )
    from telegram.ext import CallbackQueryHandler
    app.add_handler(CallbackQueryHandler(lang_callback, pattern=r"^lang_"))
