print("start.py loaded")

from pyrogram import Client, filters
from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton

from helper.db_channels import send_from_db
from helper.shortlink import generate_shortlink
from helper.payload_db import save_payload, get_payload, clear_payload
from plugins.force_sub import force_sub
from plugins.database import db

import uuid


@Client.on_message(filters.private & filters.command("start"))
async def start_handler(bot: Client, message):

    if not message.from_user:
        return

    user_id = message.from_user.id

    # ================= REGISTER USER =================
    try:
        await db.add_user(user_id)
    except:
        pass

    # ================= PARSE PARAM =================
    parts = (message.text or "").split(maxsplit=1)

    if len(parts) > 1:
        data = parts[1]
    else:
        data = await get_payload(user_id)

        if not data:
            return await message.reply_text("Halo! Kirim file atau buka link.")

    print("DATA:", data)

    # ================= VERIFY =================
    if data.startswith("verify_"):

        saved = await get_payload(user_id)

        if not saved:
            return await message.reply_text("Session expired")

        print("VERIFIED")

        data = saved

    # ================= VALIDATE =================
    if not data.startswith("get-"):
        return await message.reply_text("Link tidak valid")

    try:
        message_id = int(data.split("-", 1)[1])
    except:
        return await message.reply_text("Link rusak")

    # ================= SAVE PAYLOAD =================
    await save_payload(user_id, f"get-{message_id}")

    # ================= SHORTLINK =================
    if not (message.text and "verify_" in message.text):

        token = str(uuid.uuid4())[:8]

        me = await bot.get_me()
        verify_link = f"https://t.me/{me.username}?start=verify_{token}"

        short_link = await generate_shortlink(verify_link)

        return await message.reply_text(
            "Selesaikan shortlink",
            reply_markup=InlineKeyboardMarkup([
                [InlineKeyboardButton("Buka Link", url=short_link)]
            ])
        )

    print("SHORTLINK OK")

    # ================= FORCE SUB =================
    if not await force_sub(bot, message):
        return

    print("FORCE SUB OK")

    # ================= SEND FILE =================
    try:
        await send_from_db(bot, user_id, message_id)
    except Exception as e:
        print("SEND ERROR:", e)
        return await message.reply_text("Gagal kirim file")

    try:
        await db.add_download(user_id)
    except:
        pass

    # ================= CLEAR =================
    await clear_payload(user_id)

    await message.reply_text("File berhasil dikirim")