# admin.py
from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import ContextTypes
from telegram.error import TelegramError
from config import ADMIN_ID, MESSAGES, NAME_FORMATS
from database import (
    get_setting, set_setting, get_sponsor_channels,
    add_sponsor_channel, remove_sponsor_channel, get_stats,
    get_all_user_ids, log_stat
)
import asyncio

async def handle_admin_actions(query_or_update, context: ContextTypes.DEFAULT_TYPE, data: str):
    is_query = hasattr(query_or_update, "edit_message_text")
    
    async def reply(text, keyboard):
        markup = InlineKeyboardMarkup(keyboard)
        if is_query:
            await query_or_update.edit_message_text(text, parse_mode="Markdown", reply_markup=markup)
        else:
            await query_or_update.message.reply_text(text, parse_mode="Markdown", reply_markup=markup)
    
    # پنل اصلی
    if data in ("admin_panel",):
        check_sub = await get_setting("check_subscription")
        show_bot = await get_setting("show_bot_id")
        fwd_mode = await get_setting("forward_mode")
        name_fmt = await get_setting("name_format")
        approval = await get_setting("require_approval")
        sponsors = await get_sponsor_channels()
        s = await get_stats()
        
        ci = "✅" if check_sub == "1" else "❌"
        bi = "✅" if show_bot == "1" else "❌"
        ft = MESSAGES["status_copy"] if fwd_mode == "copy" else MESSAGES["status_forward"]
        ai = "✅" if approval == "1" else "❌"
        
        text = (
            f"{MESSAGES['admin_panel_title']}\n\n"
            f"👥 بررسی عضویت: {ci}\n"
            f"🤖 نمایش آیدی ربات: {bi}\n"
            f"📤 حالت ارسال: {ft}\n"
            f"🎨 فرمت نام: شماره {name_fmt}\n"
            f"🔍 تایید قبل از انتشار: {ai}\n"
            f"📢 اسپانسر: {len(sponsors)} کانال\n\n"
            f"📊 *آمار سریع*\n"
            f"👤 کاربران: {s['total_users']}\n"
            f"🎵 کل آهنگ‌ها: {s['total_songs'] + s['total_anon']}\n"
            f"⏳ در صف تایید: {s['pending']}\n"
        )
        keyboard = [
            [
                InlineKeyboardButton(f"{ci} بررسی عضویت", callback_data="admin_toggle_sub"),
                InlineKeyboardButton(f"{bi} آیدی ربات", callback_data="admin_toggle_bot"),
            ],
            [
                InlineKeyboardButton("📤 حالت ارسال", callback_data="admin_toggle_fwd"),
                InlineKeyboardButton("🎨 فرمت نام", callback_data="admin_name_format"),
            ],
            [
                InlineKeyboardButton(f"{ai} تایید آهنگ", callback_data="admin_toggle_approval"),
                InlineKeyboardButton("📢 اسپانسرها", callback_data="admin_sponsors"),
            ],
            [
                InlineKeyboardButton("📊 آمار کامل", callback_data="admin_stats"),
                InlineKeyboardButton("📣 پیام همگانی", callback_data="admin_broadcast"),
            ],
        ]
        await reply(text, keyboard)
        return
    
    # تاگل‌ها
    if data == "admin_toggle_sub":
        v = await get_setting("check_subscription")
        await set_setting("check_subscription", "0" if v == "1" else "1")
        await handle_admin_actions(query_or_update, context, "admin_panel")
        return
    
    if data == "admin_toggle_bot":
        v = await get_setting("show_bot_id")
        await set_setting("show_bot_id", "0" if v == "1" else "1")
        await handle_admin_actions(query_or_update, context, "admin_panel")
        return
    
    if data == "admin_toggle_fwd":
        v = await get_setting("forward_mode")
        await set_setting("forward_mode", "forward" if v == "copy" else "copy")
        await handle_admin_actions(query_or_update, context, "admin_panel")
        return
    
    if data == "admin_toggle_approval":
        v = await get_setting("require_approval")
        await set_setting("require_approval", "0" if v == "1" else "1")
        await handle_admin_actions(query_or_update, context, "admin_panel")
        return
    
    # فرمت نام
    if data == "admin_name_format":
        examples = {k: v.split("[")[0].strip() for k, v in NAME_FORMATS.items()}
        keyboard = [
            [InlineKeyboardButton(f"{k}. {examples[k]}", callback_data=f"admin_setfmt_{k}")]
            for k in examples.keys()
        ]
        keyboard.append([InlineKeyboardButton(MESSAGES["btn_back"], callback_data="admin_panel")])
        await reply("🎨 *فرمت نمایش اسم رو انتخاب کن:*", keyboard)
        return
    
    if data.startswith("admin_setfmt_"):
        fmt = data.split("_")[-1]
        await set_setting("name_format", fmt)
        await handle_admin_actions(query_or_update, context, "admin_panel")
        return
    
    # اسپانسر
    if data == "admin_sponsors":
        sponsors = await get_sponsor_channels()
        text = MESSAGES["sponsors_prompt"]
        keyboard = []
        for ch_id, ch_name in sponsors:
            text += f"🔹 {ch_name} (`{ch_id}`)\n"
            keyboard.append([InlineKeyboardButton(f"❌ حذف {ch_name}", callback_data=f"admin_delsponsor_{ch_id}")])
        if not sponsors:
            text += MESSAGES["no_sponsors"]
        text += MESSAGES["sponsors_add_hint"]
        keyboard.append([InlineKeyboardButton(MESSAGES["btn_back"], callback_data="admin_panel")])
        if is_query:
            context.user_data["awaiting"] = "add_sponsor"
        await reply(text, keyboard)
        return
    
    if data.startswith("admin_delsponsor_"):
        ch_id = data.replace("admin_delsponsor_", "")
        await remove_sponsor_channel(ch_id)
        await handle_admin_actions(query_or_update, context, "admin_sponsors")
        return
    
    # آمار کامل
    if data == "admin_stats":
        s = await get_stats()
        top_txt = ""
        if s["top_user"]:
            top_txt = f"\n🏆 فعال‌ترین: `{s['top_user'][0]}` ({s['top_user'][1]} آهنگ)"
        text = (
            f"{MESSAGES['stats_title']}\n\n"
            f"👤 کل کاربران: {s['total_users']}\n"
            f"🎵 آهنگ با نام: {s['total_songs']}\n"
            f"🕵️ آهنگ ناشناس: {s['total_anon']}\n"
            f"📅 امروز: {s['today_songs']}\n"
            f"⏳ در صف تایید: {s['pending']}"
            f"{top_txt}"
        )
        keyboard = [[InlineKeyboardButton(MESSAGES["btn_back"], callback_data="admin_panel")]]
        await reply(text, keyboard)
        return
    
    # پیام همگانی
    if data == "admin_broadcast":
        context.user_data["awaiting"] = "broadcast"
        keyboard = [[InlineKeyboardButton(MESSAGES["btn_cancel"], callback_data="admin_panel")]]
        await reply(MESSAGES["broadcast_ready"], keyboard)
        return