# -*- coding: utf-8 -*-
import logging
from telegram import Update
from telegram.ext import Application, CommandHandler, CallbackQueryHandler, MessageHandler, filters
import database as db

logger = logging.getLogger(__name__)
_running: dict[int, Application] = {}


def build_reseller_app(token, owner_id, admin_id, master_bot=None):
    from handlers_reseller import start, cb, handle_message, handle_photo, panel_command, panel_text, myid_command
    app = Application.builder().token(token).build()
    app.bot_data["is_reseller"]       = True
    app.bot_data["reseller_owner_id"] = owner_id
    app.bot_data["reseller_admin_id"] = admin_id
    if master_bot:
        app.bot_data["master_bot"] = master_bot  # برای اطلاع‌رسانی به ادمین اصلی
    app.add_handler(CommandHandler("start",  start))
    app.add_handler(CommandHandler("panel",  panel_command))
    app.add_handler(CommandHandler("myid",   myid_command))
    app.add_handler(MessageHandler(filters.Regex(r"(?i)^panel$"), panel_text))
    app.add_handler(CallbackQueryHandler(cb))
    app.add_handler(MessageHandler(filters.PHOTO, handle_photo))
    app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, handle_message))
    return app


async def start_reseller_bot(master_app, owner_id):
    r = db.get_reseller(owner_id)
    if not r or not r["is_active"] or owner_id in _running:
        return
    try:
        master_bot = master_app.bot if master_app else None
        app = build_reseller_app(r["bot_token"], owner_id, r["admin_id"], master_bot)
        _running[owner_id] = app
        await app.initialize()
        await app.start()
        await app.updater.start_polling(drop_pending_updates=True)
        logger.info(f"✅ Reseller bot @{r['bot_username']} started (owner:{owner_id})")
    except Exception as e:
        logger.error(f"❌ Reseller {owner_id}: {e}")
        _running.pop(owner_id, None)


async def stop_reseller_bot(owner_id):
    app = _running.pop(owner_id, None)
    if app:
        try:
            await app.updater.stop()
            await app.stop()
            await app.shutdown()
        except Exception:
            pass


async def start_all_reseller_bots(master_app):
    for r in db.list_resellers(active_only=True):
        await start_reseller_bot(master_app, r["user_id"])
    if _running:
        logger.info(f"Started {len(_running)} reseller bot(s)")


async def notify_customer_via_reseller(reseller_id, customer_id, text):
    app = _running.get(reseller_id)
    if app:
        try:
            await app.bot.send_message(customer_id, text)
        except Exception:
            pass


async def notify_reseller_admin(reseller_id, text):
    """اطلاع‌رسانی به ادمین نماینده از طریق بات نماینده"""
    app = _running.get(reseller_id)
    if not app:
        return
    r = db.get_reseller(reseller_id)
    if r and r.get("admin_id"):
        try:
            await app.bot.send_message(r["admin_id"], text)
        except Exception:
            pass
