"""Inline panel with toggle buttons, counters, and organized navigation — inspired by digianti."""
from __future__ import annotations

from telegram import ChatPermissions, InlineKeyboardButton, InlineKeyboardMarkup, Update
from telegram.constants import ParseMode
from telegram.error import BadRequest, Forbidden
from telegram.ext import CallbackQueryHandler, ContextTypes

from bot import db
from bot.helpers import is_chat_admin
from bot.config import OWNER_ID

import logging

logger = logging.getLogger(__name__)


def _back(btn="back-main"):
    return [InlineKeyboardButton("🏛 برگشت", callback_data=btn)]


# ═══════════════════════════════════════════════
#  MAIN PANEL
# ═══════════════════════════════════════════════
def panel_keyboard():
    return InlineKeyboardMarkup([
        [InlineKeyboardButton("📋 لیست‌ها", callback_data="lists"),
         InlineKeyboardButton("🔒 قفل‌ها", callback_data="locks")],
        [InlineKeyboardButton("⚙️ تنظیمات پیشرفته", callback_data="locks2"),
         InlineKeyboardButton("❓ راهنما", callback_data="help")],
        [InlineKeyboardButton("✖️ بستن", callback_data="close")],
    ])


async def panel_cmd(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    msg = update.message or (update.callback_query.message if update.callback_query else None)
    if not msg:
        return
    text = "🔰 لطفاً بخش مورد نظر خود را انتخاب کنید:"
    if update.callback_query:
        await update.callback_query.edit_message_text(text, reply_markup=panel_keyboard())
    else:
        await msg.reply_text(text, reply_markup=panel_keyboard())


# ═══════════════════════════════════════════════
#  LISTS PANEL
# ═══════════════════════════════════════════════
def lists_keyboard():
    return InlineKeyboardMarkup([
        [InlineKeyboardButton("⛔️ لیست بن (بلاک)", callback_data="l-b"),
         InlineKeyboardButton("🤐 لیست سکوت", callback_data="l-s")],
        [InlineKeyboardButton("📝 لیست فیلتر", callback_data="l-f"),
         InlineKeyboardButton("🔮 لیست ویژه", callback_data="l-v")],
        [InlineKeyboardButton("👨‍✈️ لیست مدیران", callback_data="l-m")],
        _back(),
    ])


def _clean_confirm(list_type: str):
    return InlineKeyboardMarkup([
        [InlineKeyboardButton("🗑 پاکسازی لیست", callback_data=f"rem-{list_type}")],
        _back("lists"),
    ])


async def lists_callback(update: Update, context: ContextTypes.DEFAULT_TYPE) -> bool:
    q = update.callback_query
    data = q.data
    chat_id = q.message.chat.id

    if data in ("lists", "back-l"):
        await q.edit_message_text("📋 لطفاً بخش مورد نظر را انتخاب کنید:", reply_markup=lists_keyboard())
        return True

    list_map = {
        "l-b": ("ban", "⛔️ لیست بن (بلاک)"),
        "l-s": ("silent", "🤐 لیست سکوت"),
        "l-f": ("filter", "📝 لیست فیلتر"),
        "l-v": ("vip", "🔮 لیست ویژه"),
        "l-m": ("promote", "👨‍✈️ لیست مدیران"),
    }
    if data in list_map:
        key, title = list_map[data]
        items = await _get_list_items(chat_id, key)
        if items:
            text = f"{title}:\n\n{items}"
            await q.edit_message_text(text, reply_markup=_clean_confirm(key),
                                      parse_mode=ParseMode.HTML)
        else:
            await q.answer("📭 لیست مورد نظر خالی می‌باشد!", show_alert=True)
        return True

    if data.startswith("rem-"):
        key = data[4:]
        count = await _clean_list(chat_id, key)
        await q.edit_message_text(f"✅ لیست با موفقیت پاک شد! ({count} مورد حذف شد)",
                                  reply_markup=InlineKeyboardMarkup([_back("lists")]))
        return True

    return False


async def _get_list_items(chat_id: int, key: str) -> str:
    lines = []
    if key == "ban":
        rows = await db.blocklist_list(chat_id)
        for i, r in enumerate(rows, 1):
            uid = r["user_id"]
            lines.append(f"{i}. <a href='tg://user?id={uid}'>{uid}</a>")
    elif key == "silent":
        ids = await db.silent_list(chat_id)
        for i, uid in enumerate(ids, 1):
            lines.append(f"{i}. <a href='tg://user?id={uid}'>{uid}</a>")
    elif key == "filter":
        rows = await db.get_all_filters(chat_id)
        for i, r in enumerate(rows, 1):
            lines.append(f"{i}. {r['keyword']}")
    elif key == "vip":
        ids = await db.vip_list(chat_id)
        for i, uid in enumerate(ids, 1):
            lines.append(f"{i}. <a href='tg://user?id={uid}'>{uid}</a>")
    elif key == "promote":
        from bot.handlers.moderation import _list_promoted
        ids = await _list_promoted(chat_id)
        for i, uid in enumerate(ids, 1):
            lines.append(f"{i}. <a href='tg://user?id={uid}'>{uid}</a>")
    return "\n".join(lines) if lines else ""


async def _clean_list(chat_id: int, key: str) -> int:
    if key == "ban":
        rows = await db.blocklist_list(chat_id)
        for r in rows:
            await db.blocklist_remove(chat_id, r["user_id"])
        return len(rows)
    elif key == "silent":
        ids = await db.silent_list(chat_id)
        await db.silent_clear(chat_id)
        return len(ids)
    elif key == "filter":
        await db.remove_all_filters(chat_id)
        return 1
    elif key == "vip":
        return await db.vip_clear(chat_id)
    elif key == "promote":
        from bot.handlers.moderation import _list_promoted, _remove_promoted
        ids = await _list_promoted(chat_id)
        for uid in ids:
            await _remove_promoted(chat_id, uid)
        return len(ids)
    return 0


# ═══════════════════════════════════════════════
#  LOCKS PANEL
# ═══════════════════════════════════════════════
LOCKS_PAGE1 = {
    "link": "🔗 لینک",
    "forward": "↪️ فوروارد",
    "tag": "🏷 تگ",
    "hashtag": "# هشتگ",
    "english": "🔤 انگلیسی",
    "persian": "🇮🇷 فارسی",
    "text": "📝 متن",
    "bot": "🤖 ربات",
    "emoji": "😀 ایموجی",
    "location": "📍 لوکیشن",
    "contact": "📞 مخاطب",
}

LOCKS_PAGE2 = {
    "photo": "🖼 عکس",
    "video": "🎬 ویدیو",
    "audio": "🎵 آهنگ",
    "document": "📄 فایل",
    "gif": "🎞 گیف",
    "sticker": "📦 استیکر",
    "game": "🎮 بازی",
    "voice": "🎤 ویس",
    "videonote": "📹 ویدیو نوت",
    "sticker_animation": "✨ استیکر متحرک",
}


def _locks_keyboard(locks: dict, page: int = 1):
    lock_map = LOCKS_PAGE1 if page == 1 else LOCKS_PAGE2
    rows = []
    keys = list(lock_map.items())
    for i in range(0, len(keys), 2):
        row = []
        for k, label in keys[i:i+2]:
            status = "✅" if locks.get(k) == "on" else "❌"
            row.append(InlineKeyboardButton(f"{status} {label}", callback_data=f"lk-{k}"))
        rows.append(row)

    nav = []
    if page == 1:
        nav.append(InlineKeyboardButton("➡️ صفحه بعدی", callback_data="locks-p2"))
    else:
        nav.append(InlineKeyboardButton("⬅️ صفحه قبلی", callback_data="locks-p1"))
    nav.append(InlineKeyboardButton("🏛 برگشت", callback_data="back-main"))
    rows.append(nav)
    return InlineKeyboardMarkup(rows)


async def locks_callback(update: Update, context: ContextTypes.DEFAULT_TYPE) -> bool:
    q = update.callback_query
    data = q.data
    chat_id = q.message.chat.id

    if data in ("locks", "back-locks"):
        locks = await _get_locks_dict(chat_id)
        await q.edit_message_text("🔒 قفل‌ها را تاگل کنید:", reply_markup=_locks_keyboard(locks, 1))
        return True

    if data == "locks-p1":
        locks = await _get_locks_dict(chat_id)
        await q.edit_message_text("🔒 قفل‌ها را تاگل کنید:", reply_markup=_locks_keyboard(locks, 1))
        return True

    if data == "locks-p2":
        locks = await _get_locks_dict(chat_id)
        await q.edit_message_text("🔒 قفل‌های رسانه:", reply_markup=_locks_keyboard(locks, 2))
        return True

    if data.startswith("lk-"):
        lock_type = data[3:]
        locks = await _get_locks_dict(chat_id)
        if locks.get(lock_type) == "on":
            await db.remove_lock(chat_id, lock_type)
            locks[lock_type] = "off"
        else:
            await db.add_lock(chat_id, lock_type)
            locks[lock_type] = "on"
        page = 1 if lock_type in LOCKS_PAGE1 else 2
        await q.edit_message_text("🔒 قفل‌ها را تاگل کنید:", reply_markup=_locks_keyboard(locks, page))
        return True

    return False


async def _get_locks_dict(chat_id: int) -> dict:
    lock_list = await db.get_locks(chat_id)
    return {lt: "on" for lt in lock_list}


# ═══════════════════════════════════════════════
#  ADVANCED SETTINGS
# ═══════════════════════════════════════════════
def advanced_keyboard():
    return InlineKeyboardMarkup([
        [InlineKeyboardButton("⚠️ تنظیمات اخطار", callback_data="setw"),
         InlineKeyboardButton("🌊 ضد رگبار", callback_data="flood")],
        [InlineKeyboardButton("💬 خوشامدگویی", callback_data="wel"),
         InlineKeyboardButton("🔥 حالت سختگیرانه", callback_data="hard")],
        [InlineKeyboardButton("✅ قفل گروه", callback_data="lockgp"),
         InlineKeyboardButton("⚙️ دسترسی‌ها", callback_data="can")],
        [InlineKeyboardButton("📮 عضویت اجباری", callback_data="adj"),
         InlineKeyboardButton("🔮 ادد اجباری", callback_data="adde")],
        [InlineKeyboardButton("📚 ضدتبچی", callback_data="antit")],
        _back(),
    ])


async def advanced_callback(update: Update, context: ContextTypes.DEFAULT_TYPE) -> bool:
    q = update.callback_query
    data = q.data
    chat_id = q.message.chat.id

    if data in ("locks2", "back-adv"):
        await q.edit_message_text("⚙️ تنظیمات پیشرفته:", reply_markup=advanced_keyboard())
        return True

    # ── Warn Settings ──
    if data.startswith("setw"):
        parts = data.split("-")
        settings = await db.get_all_settings(chat_id)
        warn_count = int(settings.get("warn_count", 3))
        warn_mode = settings.get("warn_mode", "ban")

        if len(parts) > 1:
            d = parts[1]
            if d in ("ban", "silent"):
                await db.set_setting(chat_id, "warn_mode", d)
                warn_mode = d
            elif d == "w-1":
                warn_count = min(10, warn_count + 1)
                await db.set_setting(chat_id, "warn_count", str(warn_count))
            elif d == "w--1":
                warn_count = max(1, warn_count - 1)
                await db.set_setting(chat_id, "warn_count", str(warn_count))

        s = "سکوت ✅" if warn_mode == "silent" else "سکوت"
        b = "بن ✅" if warn_mode == "ban" else "بن"
        kb = InlineKeyboardMarkup([
            [InlineKeyboardButton("➖", callback_data="setw-w--1"),
             InlineKeyboardButton(f"تعداد: {warn_count}", callback_data="setw-null"),
             InlineKeyboardButton("➕", callback_data="setw-w-1")],
            [InlineKeyboardButton(s, callback_data="setw-silent"),
             InlineKeyboardButton(b, callback_data="setw-ban")],
            _back("locks2"),
        ])
        await q.edit_message_text("⚠️ تنظیمات اخطار:", reply_markup=kb)
        return True

    # ── Flood Settings ──
    if data.startswith("flood"):
        parts = data.split("-")
        settings = await db.get_all_settings(chat_id)
        antiflood = settings.get("antiflood", "false").lower() == "true"
        flood_limit = int(settings.get("flood_limit", 5))
        flood_time = int(settings.get("flood_time", 10))
        flood_mode = settings.get("flood_mode", "mute")

        if len(parts) > 1:
            d = parts[1]
            if d == "on":
                await db.set_setting(chat_id, "antiflood", "true")
                antiflood = True
            elif d == "off":
                await db.set_setting(chat_id, "antiflood", "false")
                antiflood = False
            elif d in ("mute", "ban", "kick"):
                await db.set_setting(chat_id, "flood_mode", d)
                flood_mode = d
            elif d.startswith("t-"):
                delta = int(d[2:])
                new_time = flood_time + delta
                if 2 <= new_time <= 10:
                    await db.set_setting(chat_id, "flood_time", str(new_time))
                    flood_time = new_time
            elif d.startswith("d-"):
                delta = int(d[2:])
                new_limit = flood_limit + delta
                if 2 <= new_limit <= 10:
                    await db.set_setting(chat_id, "flood_limit", str(new_limit))
                    flood_limit = new_limit

        status = "فعال ✅" if antiflood else "فعال"
        status_off = "غیرفعال ✅" if not antiflood else "غیرفعال"
        mode_labels = {"mute": "سکوت", "ban": "بن", "kick": "کیک"}
        mode_m = "سکوت ✅" if flood_mode == "mute" else "سکوت"
        mode_b = "بن ✅" if flood_mode == "ban" else "بن"
        mode_k = "کیک ✅" if flood_mode == "kick" else "کیک"

        rows = [
            [InlineKeyboardButton(status, callback_data="flood-on"),
             InlineKeyboardButton(status_off, callback_data="flood-off")],
        ]
        if antiflood:
            rows.extend([
                [InlineKeyboardButton(mode_m, callback_data="flood-mute"),
                 InlineKeyboardButton(mode_b, callback_data="flood-ban"),
                 InlineKeyboardButton(mode_k, callback_data="flood-kick")],
                [InlineKeyboardButton("⏰ زمان (ثانیه)", callback_data="flood-null")],
                [InlineKeyboardButton("➖", callback_data="flood-t--1"),
                 InlineKeyboardButton(str(flood_time), callback_data="flood-null"),
                 InlineKeyboardButton("➕", callback_data="flood-t-1")],
                [InlineKeyboardButton("📊 تعداد مجاز", callback_data="flood-null")],
                [InlineKeyboardButton("➖", callback_data="flood-d--1"),
                 InlineKeyboardButton(str(flood_limit), callback_data="flood-null"),
                 InlineKeyboardButton("➕", callback_data="flood-d-1")],
            ])
        rows.append(_back("locks2"))
        await q.edit_message_text("🌊 تنظیمات ضد رگبار:", reply_markup=InlineKeyboardMarkup(rows))
        return True

    # ── Welcome ──
    if data.startswith("wel"):
        parts = data.split("-")
        settings = await db.get_all_settings(chat_id)
        welcome_on = settings.get("welcome_enabled", "true").lower() == "true"

        if len(parts) > 1:
            d = parts[1]
            if d == "on":
                await db.set_setting(chat_id, "welcome_enabled", "true")
                welcome_on = True
            elif d == "off":
                await db.set_setting(chat_id, "welcome_enabled", "false")
                welcome_on = False

        status = "فعال ✅" if welcome_on else "فعال"
        status_off = "غیرفعال ✅" if not welcome_on else "غیرفعال"
        kb = InlineKeyboardMarkup([
            [InlineKeyboardButton(status, callback_data="wel-on"),
             InlineKeyboardButton(status_off, callback_data="wel-off")],
            [InlineKeyboardButton("💈 تنظیم پیام خوشامد", callback_data="setwel")],
            [InlineKeyboardButton("🗑 حذف پیام خوشامد", callback_data="remwel")],
            _back("locks2"),
        ])
        await q.edit_message_text("💬 بخش خوشامدگویی:", reply_markup=kb)
        return True

    # ── Hard mode ──
    if data.startswith("hard"):
        parts = data.split("-")
        settings = await db.get_all_settings(chat_id)
        hard_on = settings.get("hard_mode", "false").lower() == "true"

        if len(parts) > 1:
            d = parts[1]
            if d == "on":
                await db.set_setting(chat_id, "hard_mode", "true")
                hard_on = True
            elif d == "off":
                await db.set_setting(chat_id, "hard_mode", "false")
                hard_on = False

        status = "فعال ✅" if hard_on else "فعال"
        status_off = "غیرفعال ✅" if not hard_on else "غیرفعال"
        kb = InlineKeyboardMarkup([
            [InlineKeyboardButton(status, callback_data="hard-on"),
             InlineKeyboardButton(status_off, callback_data="hard-off")],
            _back("locks2"),
        ])
        text = ("🔥 حالت سختگیرانه\n\n"
                "با فعال‌سازی این حالت، اگر کاربران لینک یا فوروارد بفرستند "
                "به صورت همیشگی سکوت می‌شوند.")
        await q.edit_message_text(text, reply_markup=kb)
        return True

    # ── Group Lock ──
    if data.startswith("lockgp"):
        settings = await db.get_all_settings(chat_id)
        muteall = settings.get("muteall", "false").lower() == "true"
        parts = data.split("-")

        if len(parts) > 1:
            d = parts[1]
            if d == "on":
                await db.set_setting(chat_id, "muteall", "true")
                muteall = True
            elif d == "off":
                await db.set_setting(chat_id, "muteall", "false")
                muteall = False

        status = "فعال ✅" if muteall else "فعال"
        status_off = "غیرفعال ✅" if not muteall else "غیرفعال"
        kb = InlineKeyboardMarkup([
            [InlineKeyboardButton(status, callback_data="lockgp-on"),
             InlineKeyboardButton(status_off, callback_data="lockgp-off")],
            _back("locks2"),
        ])
        text = ("✅ قفل گروه\n\n"
                "با فعال‌سازی، تمام کاربران غیر از ادمین قادر به ارسال پیام نخواهند بود.")
        await q.edit_message_text(text, reply_markup=kb)
        return True

    # ── Chat Permissions ──
    if data.startswith("can"):
        try:
            member = await context.bot.get_chat_member(chat_id, context.bot.id)
            if member.status not in ("administrator", "creator"):
                await q.answer("🤖 ربات ادمین نیست!", show_alert=True)
                return True
        except Exception:
            pass

        chat = await context.bot.get_chat(chat_id)
        perms = chat.permissions
        can_map = [
            ("ارسال پیام", "can_send_messages", perms.can_send_messages if perms else True),
            ("ارسال رسانه", "can_send_media_messages", perms.can_send_media_messages if perms else True),
            ("ارسال نظرسنجی", "can_send_polls", perms.can_send_polls if perms else True),
            ("ارسال سایر پیام‌ها", "can_send_other_messages", perms.can_send_other_messages if perms else True),
            ("پیش‌نمایش لینک", "can_add_web_page_previews", perms.can_add_web_page_previews if perms else True),
            ("دعوت کاربر", "can_invite_users", perms.can_invite_users if perms else True),
            ("تغییر اطلاعات گروه", "can_change_info", perms.can_change_info if perms else False),
            ("سنجاق پیام", "can_pin_messages", perms.can_pin_messages if perms else False),
        ]

        parts = data.split("_")
        if len(parts) > 1:
            perm_key = "_".join(parts[1:])
            for label, key, val in can_map:
                if key == perm_key:
                    new_perms = ChatPermissions(
                        can_send_messages=(perms.can_send_messages if perms else True),
                        can_send_media_messages=(perms.can_send_media_messages if perms else True),
                        can_send_polls=(perms.can_send_polls if perms else True),
                        can_send_other_messages=(perms.can_send_other_messages if perms else True),
                        can_add_web_page_previews=(perms.can_add_web_page_previews if perms else True),
                        can_invite_users=(perms.can_invite_users if perms else True),
                        can_change_info=(perms.can_change_info if perms else False),
                        can_pin_messages=(perms.can_pin_messages if perms else False),
                    )
                    setattr(new_perms, key, not val)
                    await context.bot.set_chat_permissions(chat_id, new_perms)
                    break

        chat = await context.bot.get_chat(chat_id)
        perms = chat.permissions
        can_map = [
            ("ارسال پیام", "can_send_messages", perms.can_send_messages if perms else True),
            ("ارسال رسانه", "can_send_media_messages", perms.can_send_media_messages if perms else True),
            ("ارسال نظرسنجی", "can_send_polls", perms.can_send_polls if perms else True),
            ("ارسال سایر پیام‌ها", "can_send_other_messages", perms.can_send_other_messages if perms else True),
            ("پیش‌نمایش لینک", "can_add_web_page_previews", perms.can_add_web_page_previews if perms else True),
            ("دعوت کاربر", "can_invite_users", perms.can_invite_users if perms else True),
            ("تغییر اطلاعات گروه", "can_change_info", perms.can_change_info if perms else False),
            ("سنجاق پیام", "can_pin_messages", perms.can_pin_messages if perms else False),
        ]
        rows = []
        for label, key, val in can_map:
            icon = "✅" if val else "❌"
            rows.append([InlineKeyboardButton(f"{icon} {label}", callback_data=f"can_{key}")])
        rows.append(_back("locks2"))
        await q.edit_message_text("⚙️ دسترسی‌های گروه:", reply_markup=InlineKeyboardMarkup(rows))
        return True

    # ── Placeholder for uneimplemented sub-panels ──
    if data in ("adde", "adj", "antit"):
        await q.edit_message_text(
            "🚧 این بخش به زودی تکمیل می‌شود.\nاز طریق دستورات متنی می‌توانید استفاده کنید.",
            reply_markup=InlineKeyboardMarkup([_back("locks2")]),
        )
        return True

    return False


# ═══════════════════════════════════════════════
#  HELP PANEL
# ═══════════════════════════════════════════════
def help_keyboard():
    return InlineKeyboardMarkup([
        [InlineKeyboardButton("🔒 راهنمای قفل‌ها", callback_data="h-l"),
         InlineKeyboardButton("👮 راهنمای مدیریت", callback_data="h-m")],
        [InlineKeyboardButton("🎮 راهنمای سرگرمی", callback_data="h-s"),
         InlineKeyboardButton("🧹 راهنمای پاکسازی", callback_data="h-p")],
        [InlineKeyboardButton("🎛 راهنمای کنترلی", callback_data="h-k"),
         InlineKeyboardButton("💬 راهنمای خوشامد", callback_data="h-kh")],
        [InlineKeyboardButton("📮 راهنمای عضویت اجباری", callback_data="h-j")],
        _back(),
    ])


HELP_TEXTS = {
    "h-l": ("🔒 <b>راهنمای قفل‌ها</b>\n\n"
            "قفل‌های اصلی:\n"
            "• قفل لینک | قفل فوروارد | قفل تگ | قفل هشتگ\n"
            "• قفل فارسی | قفل انگلیسی | قفل ربات | قفل ایموجی\n"
            "• قفل متن | قفل لوکیشن | قفل مخاطب\n\n"
            "قفل رسانه:\n"
            "• قفل عکس | قفل فیلم | قفل ویس | قفل گیف\n"
            "• قفل آهنگ | قفل فایل | قفل استیکر | قفل بازی\n"
            "• قفل ویدیو نوت\n\n"
            "برای قفل کردن در پیام بنویسید:\n"
            "<code>قفل کن [نوع]</code>\n"
            "مثال: <code>قفل کن لینک</code>"),
    "h-m": ("👮 <b>راهنمای مدیریت</b>\n\n"
            "مدیریت مدیران ربات:\n"
            "• <code>مدیر کن</code> - افزودن به مدیران\n"
            "• <code>حذف مدیر</code> - حذف از مدیران\n"
            "• <code>لیست مدیران</code> - نمایش لیست\n"
            "• <code>پیکربندی</code> - افزودن خودکار همه ادمین‌ها\n"
            "• <code>پاکسازی لیست مدیران</code>\n\n"
            "مدیریت ادمین تلگرام:\n"
            "• <code>افزودن ادمین</code> - ارتقا به ادمین\n"
            "• <code>حذف ادمین</code> - عزل از ادمینی\n"
            "• <code>لیست ادمین‌ها</code>\n\n"
            "کاربران ویژه:\n"
            "• <code>ویژه کن</code> | <code>حذف ویژه</code>\n"
            "• <code>لیست ویژه</code> | <code>پاکسازی لیست ویژه</code>"),
    "h-s": ("🎮 <b>راهنمای سرگرمی</b>\n\n"
            "• <code>فال</code> / <code>فال حافظ</code>\n"
            "• <code>تقویم</code> / <code>تاریخ</code>\n"
            "• <code>هوا</code> / <code>هواشناسی</code>\n"
            "• <code>تاس</code> / <code>سکه</code>\n"
            "• <code>رمز</code> / <code>رمز تصادفی</code>\n"
            "• <code>انتخاب کن</code> [گزینه‌ها]\n"
            "• <code>بگو</code> [متن]\n"
            "• <code>معنی</code> [کلمه]\n"
            "• <code>عکس به استیکر</code> (روی عکس ریپلای)\n"
            "• <code>استیکر به عکس</code> (روی استیکر ریپلای)\n"
            "• <code>کیوآر</code> [متن]\n"
            "• <code>نظر سنجی</code> [سوال | گزینه۱ | گزینه۲]"),
    "h-p": ("🧹 <b>راهنمای پاکسازی</b>\n\n"
            "پاکسازی پیام:\n"
            "• <code>پاکسازی ۱۰۰</code> - حذف پیام‌های اخیر\n"
            "• روی پیام ریپلای کنید و <code>حذف کن</code> بنویسید\n\n"
            "پاکسازی لیست‌ها:\n"
            "• <code>پاکسازی لیست مدیران</code>\n"
            "• <code>پاکسازی لیست ویژه</code>\n"
            "• <code>پاکسازی لیست اخطار</code>\n"
            "• <code>پاکسازی لیست بن</code>\n"
            "• <code>پاکسازی لیست سکوت</code>\n"
            "• <code>پاکسازی لیست فیلتر</code>\n"
            "• <code>پاکسازی لیست لقب</code>"),
    "h-k": ("🎛 <b>راهنمای کنترلی</b>\n\n"
            "بن و سکوت:\n"
            "• <code>بن کن</code> [دلیل] / <code>رفع بن</code>\n"
            "• <code>سکوت کن</code> [زمان] / <code>رفع سکوت</code>\n"
            "• <code>سکوت موقت ۳۰دقیقه</code>\n"
            "• <code>اخراج کن</code> / <code>کیک</code>\n\n"
            "اخطار:\n"
            "• <code>اخطار بده</code> [دلیل]\n"
            "• <code>حذف اخطار</code> / <code>لیست اخطار</code>\n"
            "• <code>پاکسازی اخطار</code>\n\n"
            "سایر:\n"
            "• <code>حذف خودکار ۳۰</code> - حذف خودکار پیام ربات\n"
            "• <code>پین کن</code> / <code>حذف پین</code>"),
    "h-kh": ("💬 <b>راهنمای خوشامدگویی</b>\n\n"
             "فعال/غیرفعال:\n"
             "• <code>خوشامد روشن</code> / <code>خوشامد خاموش</code>\n\n"
             "تنظیم متن:\n"
             "• <code>تنظیم خوشامد</code> [متن]\n"
             "• <code>حذف خوشامد</code>\n\n"
             "متغیرهای قابل استفاده:\n"
             "• <code>{mention}</code> - منشن کاربر\n"
             "• <code>{first}</code> - نام\n"
             "• <code>{last}</code> - نام خانوادگی\n"
             "• <code>{fullname}</code> - نام کامل\n"
             "• <code>{username}</code> - یوزرنیم\n"
             "• <code>{chat}</code> - نام گروه\n"
             "• <code>{id}</code> - آیدی کاربر\n"
             "• <code>{count}</code> - تعداد اعضا\n\n"
             "مثال:\n"
             "<code>تنظیم خوشامد سلام {mention} به {chat} خوش آمدی!</code>"),
    "h-j": ("📮 <b>راهنمای عضویت اجباری</b>\n\n"
            "• <code>عضویت اجباری</code> [آیدی کانال] - افزودن کانال\n"
            "• <code>حذف عضویت اجباری</code> [آیدی کانال]\n"
            "• <code>لیست عضویت اجباری</code>\n\n"
            "توجه: کاربران قبل از ارسال پیام باید عضو کانال‌های مشخص شده باشند."),
}


async def help_callback(update: Update, context: ContextTypes.DEFAULT_TYPE) -> bool:
    q = update.callback_query
    data = q.data

    if data in ("help", "back-h"):
        await q.edit_message_text("❓ لطفاً بخش مورد نظر را انتخاب کنید:", reply_markup=help_keyboard())
        return True

    if data in HELP_TEXTS:
        text = HELP_TEXTS[data]
        await q.edit_message_text(text, reply_markup=InlineKeyboardMarkup([_back("help")]),
                                  parse_mode=ParseMode.HTML)
        return True

    return False


# ═══════════════════════════════════════════════
#  MAIN CALLBACK ROUTER
# ═══════════════════════════════════════════════
async def panel_callback(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    q = update.callback_query
    if not q or not q.data:
        return

    data = q.data
    chat_id = q.message.chat.id
    user_id = q.from_user.id

    if not await is_chat_admin(context.bot, chat_id, user_id) and user_id != OWNER_ID:
        await q.answer("⛔ فقط ادمین‌ها می‌توانند از پنل استفاده کنند!", show_alert=True)
        return

    if data == "close":
        try:
            await q.message.delete()
        except (BadRequest, Forbidden):
            pass
        return

    if data == "back-main":
        await q.edit_message_text("🔰 لطفاً بخش مورد نظر را انتخاب کنید:", reply_markup=panel_keyboard())
        return

    if await lists_callback(update, context):
        return
    if await locks_callback(update, context):
        return
    if await advanced_callback(update, context):
        return
    if await help_callback(update, context):
        return


def register(app) -> None:
    from bot.persian_router import register_mixed

    register_mixed(
        app,
        {"panel": panel_cmd, "menu": panel_cmd, "settings": panel_cmd},
        {"پنل": panel_cmd, "تنظیمات": panel_cmd, "منو": panel_cmd},
    )
    app.add_handler(
        CallbackQueryHandler(
            panel_callback,
            pattern=r"^(lists|back-|l-|rem-|lk-|locks|setw|flood|wel|hard|lockgp|can|help|h-|d-e|adde|adj|back-main|close|locks-p|setwel|remwel|antit)",
        )
    )
    logger.info("Inline panel registered")
