"""
Webhook'ni Telegram tomonida ro'yxatdan o'tkazish/o'chirish uchun BIR MARTA
ishga tushiriladigan skript.

Ishlatish (cPanel Terminal yoki SSH orqali, ilova virtualenv'i faollashtirilgan
holda — cPanel "Setup Python App" sahifasida "Enter to the virtual
environment" buyrug'i beriladi):

    python set_webhook.py            # webhookni o'rnatadi
    python set_webhook.py delete     # webhookni o'chiradi (polling'ga qaytish uchun)
    python set_webhook.py info       # joriy webhook holatini ko'rsatadi
"""
import asyncio
import sys

from aiogram import Bot

import config


async def main():
    if not config.BOT_TOKEN:
        raise RuntimeError("BOT_TOKEN topilmadi (.env faylini tekshiring).")

    bot = Bot(token=config.BOT_TOKEN)
    action = sys.argv[1] if len(sys.argv) > 1 else "set"

    try:
        if action == "delete":
            await bot.delete_webhook(drop_pending_updates=True)
            print("✅ Webhook o'chirildi.")

        elif action == "info":
            info = await bot.get_webhook_info()
            print(info)

        else:
            if not config.WEBHOOK_BASE_URL:
                raise RuntimeError(
                    "WEBHOOK_BASE_URL topilmadi. .env faylida to'liq domen "
                    "manzilingizni yozing, masalan: https://domeningiz.com"
                )
            url = f"{config.WEBHOOK_BASE_URL.rstrip('/')}/{config.WEBHOOK_PATH}"
            ok = await bot.set_webhook(
                url=url,
                secret_token=config.WEBHOOK_SECRET_TOKEN or None,
                drop_pending_updates=True,
                allowed_updates=[
                    "message",
                    "callback_query",
                    "pre_checkout_query",
                ],
            )
            print(f"{'✅' if ok else '❌'} Webhook manzili: {url}")
            info = await bot.get_webhook_info()
            print(info)
    finally:
        await bot.session.close()


if __name__ == "__main__":
    asyncio.run(main())
