print("callback.py loaded")

from pyrogram import Client, filters
from pyrogram.types import CallbackQuery, InlineKeyboardMarkup, InlineKeyboardButton

from helper.payload_db import get_payload


# =========================
# RETRY HANDLER
# =========================
@Client.on_callback_query(filters.regex("^(fsub_retry|retry)$"))
async def retry_handler(client: Client, query: CallbackQuery):

    if not query.from_user:
        return

    user_id = query.from_user.id

    try:
        await query.answer()
    except:
        pass

    print("RETRY CLICK:", user_id)

    # =========================
    # GET PAYLOAD FROM DB
    # =========================
    payload = await get_payload(user_id)

    if not payload or not payload.startswith("get-"):
        print("SESSION HILANG:", user_id)

        return await safe_edit(
            query,
            "Session expired, buka ulang link"
        )

    print("PAYLOAD:", payload)

    # =========================
    # BUILD START LINK
    # =========================
    try:
        bot_info = await client.get_me()
        start_link = f"https://t.me/{bot_info.username}?start={payload}"
    except Exception as e:
        print("GET BOT INFO ERROR:", e)
        return await safe_edit(query, "Gagal membuat link")

    # =========================
    # RESPONSE
    # =========================
    text = "Lanjutkan proses"

    buttons = InlineKeyboardMarkup([
        [InlineKeyboardButton("Lanjutkan", url=start_link)]
    ])

    await safe_edit(query, text, buttons)


# =========================
# SAFE EDIT
# =========================
async def safe_edit(query, text, markup=None):
    try:
        await query.message.edit_text(
            text,
            reply_markup=markup,
            disable_web_page_preview=True
        )
    except Exception as e:
        print("EDIT FAIL:", e)

        try:
            await query.message.reply_text(
                text,
                reply_markup=markup,
                disable_web_page_preview=True
            )
        except Exception as e2:
            print("TOTAL FAIL:", e2)