import logging

from telegram.ext import (
    ApplicationBuilder,
    CommandHandler,
    CallbackQueryHandler,
    MessageHandler,
    PicklePersistence,
    filters
)

from config import TOKEN

logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s [%(levelname)s] %(name)s: %(message)s",
    datefmt="%H:%M:%S"
)
# Matikan log spam dari library telegram
logging.getLogger("httpx").setLevel(logging.WARNING)
logging.getLogger("telegram").setLevel(logging.WARNING)

log = logging.getLogger("bot")

from handlers.start_handler import start
from handlers.button_handler import button_handler
from handlers.photo_handler import handle_photo
from handlers.text_handler import handle_text

from handlers.admin_handler import (
    buat_promo,
    cek_promo,
    list_link,
    hapus_link,
    edit_link,
    info_grup,
    cek_user,
)

from handlers.broadcast_handler import (
    handle_broadcast_media,
    handle_broadcast_text
)

from handlers.admin_manage_handler import (
    tambah_admin,
    hapus_admin_bot,
    list_admin
)
from handlers.vs_manage_handler import tambah_vs_paket
from handlers.vip_manage_handler import tambah_vip_paket


def main():

    persistence = PicklePersistence(filepath="data/bot_persistence")
    app = ApplicationBuilder().token(TOKEN).persistence(persistence).build()

    PRIVATE = filters.ChatType.PRIVATE

    # COMMAND HANDLER
    app.add_handler(CommandHandler("start", start, filters=PRIVATE))
    app.add_handler(CommandHandler("promo", buat_promo, filters=PRIVATE))
    app.add_handler(CommandHandler("cekpromo", cek_promo, filters=PRIVATE))
    app.add_handler(CommandHandler("listlink", list_link, filters=PRIVATE))
    app.add_handler(CommandHandler("hapuslink", hapus_link, filters=PRIVATE))
    app.add_handler(CommandHandler("editlink", edit_link, filters=PRIVATE))
    app.add_handler(CommandHandler("infogrup", info_grup, filters=PRIVATE))
    app.add_handler(CommandHandler("cekuser", cek_user, filters=PRIVATE))

    # CALLBACK BUTTON
    app.add_handler(CallbackQueryHandler(button_handler))
    # USER PAYMENT PHOTO
    app.add_handler(
        MessageHandler(
            PRIVATE & filters.PHOTO & ~filters.VIDEO,
            handle_photo
        )
    )
    # MEDIA BROADCAST (ADMIN)
    app.add_handler(
        MessageHandler(
            PRIVATE & (filters.PHOTO | filters.VIDEO),
            handle_broadcast_media
        )
    )
    # USER TEXT (PROMO / PAYMENT)
    app.add_handler(
        MessageHandler(
            PRIVATE & filters.TEXT & ~filters.COMMAND,
            handle_text
        )
    )
    # BROADCAST TEXT (ADMIN ONLY)
    app.add_handler(
        MessageHandler(
            PRIVATE & filters.TEXT & ~filters.COMMAND,
            handle_broadcast_text
        )
    )

    app.add_handler(CommandHandler("tambahadmin", tambah_admin, filters=PRIVATE))
    app.add_handler(CommandHandler("hapusadmin", hapus_admin_bot, filters=PRIVATE))
    app.add_handler(CommandHandler("listadmin", list_admin, filters=PRIVATE))
    app.add_handler(CommandHandler("vcspaket", tambah_vs_paket, filters=PRIVATE))
    app.add_handler(CommandHandler("vippaket", tambah_vip_paket, filters=PRIVATE))

    log.info("Bot Payment Sedang Berjalan...")
    app.run_polling()


if __name__ == "__main__":
    main()