import logging

from aiogram import Router, Bot
from aiogram.types import PreCheckoutQuery, Message

import config
import database as db

router = Router(name="payments")


@router.pre_checkout_query()
async def process_pre_checkout(pre_checkout_q: PreCheckoutQuery):
    # Bu yerda qo'shimcha tekshiruvlar qo'shish mumkin (masalan, band bo'lmagan
    # sovg'a yoki mavjud reja ekanini tasdiqlash). Hozircha barchasini tasdiqlaymiz.
    await pre_checkout_q.answer(ok=True)


@router.message(lambda m: m.successful_payment is not None)
async def process_successful_payment(message: Message, bot: Bot):
    payment = message.successful_payment
    payload = payment.invoice_payload
    stars = payment.total_amount
    charge_id = payment.telegram_payment_charge_id
    buyer_id = message.from_user.id

    parts = payload.split(":")
    kind = parts[0]

    if kind == "premium":
        plan_key = parts[1]
        db.grant_premium(buyer_id, plan_key)
        db.log_payment(buyer_id, f"premium_{plan_key}", stars, charge_id)
        plan = config.PREMIUM_PLANS[plan_key]
        await message.answer(
            f"🎉 Tabriklaymiz! Premium ({plan['title']}) faollashtirildi.\n"
            f"Joriy holat: {db.premium_label(buyer_id)}"
        )

    elif kind == "gift":
        gift_id, target_id = parts[1], int(parts[2])
        db.log_payment(buyer_id, "gift", stars, charge_id)
        try:
            await bot.send_gift(
                user_id=target_id,
                gift_id=gift_id,
                text="Sizga anonim sovg'a yuborishdi! 🎁",
            )
            await message.answer("🎁 Sovg'a muvaffaqiyatli yuborildi!")
        except Exception:
            logging.exception("Sovg'a yuborishda xato")
            await message.answer(
                "❌ Sovg'ani yetkazib bo'lmadi, lekin to'lovingiz qabul qilindi. "
                "Iltimos, admin bilan bog'laning."
            )
    else:
        logging.warning("Noma'lum to'lov payload: %s", payload)
