from telegram import Update
from telegram.ext import ContextTypes
from database.db import DB
from utils.helpers import money
from utils.keyboards import inline
from utils.decorators import anti_flood

@anti_flood
async def wallet_menu(update: Update, context: ContextTypes.DEFAULT_TYPE):
    uid = update.effective_user.id
    row = await DB.fetchone("SELECT balance, total_deposits, total_purchases, referral_earnings "
                            "FROM users WHERE user_id=?", (uid,))
    if not row:
        await update.message.reply_text("Please press /start first."); return
    text = (
        "💰 <b>Wallet</b>\n\n"
        f"Balance: <b>{money(row['balance'])}</b>\n"
        f"Total Deposits: {money(row['total_deposits'])}\n"
        f"Total Purchases: {money(row['total_purchases'])}\n"
        f"Referral Earnings: {money(row['referral_earnings'])}"
    )
    kb = inline([
        [("➕ Add Funds", "wallet:add")],
        [("📜 Deposit History", "wallet:deps"), ("🛒 Purchase History", "wallet:buys")],
    ])
    if update.callback_query:
        await update.callback_query.edit_message_text(text, parse_mode="HTML", reply_markup=kb)
    else:
        await update.message.reply_html(text, reply_markup=kb)

async def wallet_history(update: Update, context: ContextTypes.DEFAULT_TYPE):
    q = update.callback_query; await q.answer()
    uid = q.from_user.id
    kind = q.data.split(":")[1]
    if kind == "deps":
        rows = await DB.fetchall(
            "SELECT method, amount, status, created_at FROM deposits "
            "WHERE user_id=? ORDER BY id DESC LIMIT 10", (uid,))
        if not rows:
            text = "No deposits yet."
        else:
            text = "<b>Recent Deposits</b>\n\n" + "\n".join(
                f"• {r['created_at'][:16]} — {r['method']} {money(r['amount'])} — {r['status']}"
                for r in rows)
    else:
        rows = await DB.fetchall(
            "SELECT product_name, amount, created_at FROM orders "
            "WHERE user_id=? ORDER BY id DESC LIMIT 10", (uid,))
        if not rows:
            text = "No purchases yet."
        else:
            text = "<b>Recent Purchases</b>\n\n" + "\n".join(
                f"• {r['created_at'][:16]} — {r['product_name']} — {money(r['amount'])}"
                for r in rows)
    await q.edit_message_text(text, parse_mode="HTML",
        reply_markup=inline([[("⬅ Back", "wallet:menu")]]))

async def wallet_back(update, context):
    await wallet_menu(update, context)
