"""
Сравнение: как упростить код платежей с NEONPAY API
Вместо 100+ строк кода - всего несколько строк!
"""

# ========== ВАША ТЕКУЩАЯ РЕАЛИЗАЦИЯ (длинная) ==========
# Ваш код требует:
# - Множественные функции (pre_checkout_handler, successful_payment_handler, process_verification_payment, process_topup_payment)
# - Ручную обработку JSON payload
# - Сложную логику логирования
# - Множественные проверки и валидации
# - Около 100+ строк кода

# ========== С NEONPAY API (короткая) ==========

from aiogram import Router, types
from aiogram.filters import Command
from neonpay import NeonPay
from config import bot, update_user_balance, update_user_verification_status, LOG_ID

# Инициализация NEONPAY (1 строка!)
neonpay = NeonPay.create_for_aiogram(bot)

router = Router()


# ========== ВЕРИФИКАЦИЯ (вместо 50+ строк - всего 10!) ==========
@router.message(Command("verify"))
async def verify_handler(message: types.Message):
    user_id = message.from_user.id

    # Создаем этап оплаты для верификации
    verification_stage = neonpay.create_payment_stage(
        title="Account Verification",
        description="Verify your account to access premium features",
        price=50,  # 50 XTR
        payload={"type": "verification", "user_id": user_id},
    )

    # Отправляем инвойс (1 строка!)
    await neonpay.send_invoice(message.chat.id, verification_stage)


# ========== ПОПОЛНЕНИЕ БАЛАНСА (вместо 40+ строк - всего 8!) ==========
@router.message(Command("topup"))
async def topup_handler(message: types.Message):
    args = message.text.split()
    if len(args) < 2 or not args[1].isdigit():
        return await message.answer("Использование: /topup <сумма>")

    amount = int(args[1])
    user_id = message.from_user.id

    # Создаем этап оплаты для пополнения
    topup_stage = neonpay.create_payment_stage(
        title="Balance Top-up",
        description=f"Add {amount} Stars to your balance",
        price=amount,
        payload={"type": "topup", "user_id": user_id, "amount": amount},
    )

    # Отправляем инвойс (1 строка!)
    await neonpay.send_invoice(message.chat.id, topup_stage)


# ========== ОБРАБОТКА УСПЕШНЫХ ПЛАТЕЖЕЙ (вместо 60+ строк - всего 15!) ==========
@neonpay.on_successful_payment
async def handle_payment(payment_result):
    """Обрабатывает ВСЕ успешные платежи автоматически"""
    user_id = payment_result.user_id
    payload = payment_result.payload
    amount = payment_result.amount

    if payload["type"] == "verification":
        # Активируем верификацию
        await update_user_verification_status(
            user_id, verified=True, purchase_flag=True
        )

        # Отправляем уведомление пользователю
        await bot.send_message(user_id, "✅ Your account has been verified!")

        # Логирование (ваша система)
        log_text = f"✅ Верификация: {user_id}, сумма: {amount} XTR"
        await bot.send_message(LOG_ID, log_text)

    elif payload["type"] == "topup":
        # Пополняем баланс
        await update_user_balance(user_id, amount, "XTR")

        # Отправляем уведомление пользователю
        await bot.send_message(user_id, f"💰 Balance topped up with {amount} Stars!")

        # Логирование (ваша система)
        log_text = f"💰 Пополнение: {user_id}, сумма: {amount} XTR"
        await bot.send_message(LOG_ID, log_text)


# ========== ДОПОЛНИТЕЛЬНЫЕ ВОЗМОЖНОСТИ NEONPAY ==========


# Middleware для автоматического логирования всех платежей
@neonpay.add_middleware
async def payment_logger(payment_result, next_handler):
    """Автоматически логирует все платежи"""
    print(f"💸 Платеж: {payment_result.user_id} -> {payment_result.amount} XTR")
    return await next_handler(payment_result)


# Валидация платежей
@neonpay.add_middleware
async def payment_validator(payment_result, next_handler):
    """Проверяет валидность платежей"""
    if payment_result.amount <= 0:
        print(f"❌ Неверная сумма: {payment_result.amount}")
        return
    return await next_handler(payment_result)


# ========== ИТОГО ==========
# Ваш код: ~100+ строк
# С NEONPAY: ~40 строк (включая комментарии!)
#
# Преимущества NEONPAY:
# ✅ В 3 раза меньше кода
# ✅ Автоматическая обработка pre_checkout и successful_payment
# ✅ Встроенная система middleware
# ✅ Простая валидация и обработка ошибок
# ✅ Легко добавлять новые типы платежей
