import logging
import html
from services.transaction_service import (
    get_user_transactions,
    get_user_transaction_count,
    get_transaction_summary
)

log = logging.getLogger("bot.transaction_view")


def _format_rupiah(value):
    try:
        return f"Rp {int(value):,}".replace(",", ".")
    except (TypeError, ValueError):
        return "Rp 0"


def format_transaction_list(user_id, page=0, per_page=5):
    """
    Format daftar transaksi user untuk ditampilkan di chat
    
    Args:
        user_id: ID user
        page: Halaman (0-indexed)
        per_page: Jumlah item per halaman
    
    Returns:
        Dict berisi formatted text dan pagination info
    """
    offset = page * per_page
    transactions = get_user_transactions(user_id, limit=per_page, offset=offset)
    total_count = get_user_transaction_count(user_id)
    total_pages = (total_count + per_page - 1) // per_page
    
    if not transactions:
        return {
            "text": "📊 Riwayat Transaksi\n\n❌ Kamu belum memiliki transaksi.",
            "total_count": 0,
            "current_page": page,
            "total_pages": 0,
            "has_prev": False,
            "has_next": False
        }
    
    text = f"📊 <b>Riwayat Transaksi</b> (Halaman {page + 1}/{total_pages})\n\n"
    
    for idx, tx in enumerate(transactions, start=offset + 1):
        status_emoji = "✅" if tx['status'] == "approved" else "❌" if tx['status'] == "rejected" else "⏳"
        status_text = {
            "approved": "Disetujui",
            "rejected": "Ditolak",
            "pending": "Tertunda"
        }.get(tx['status'], tx['status'])
        
        promo_text = f"\n🎟️ Promo: <code>{html.escape(str(tx['promo_used']))}</code>" if tx['promo_used'] else ""
        trx_code = tx.get("transaction_code")
        code_text = f"\n🆔 Kode: <code>{html.escape(str(trx_code))}</code>" if trx_code else ""
        
        text += (
            f"{idx}. {status_emoji} <b>{html.escape(str(tx['package_label']))}</b>\n"
            f"💰 {_format_rupiah(tx['harga_bayar'])}{promo_text}{code_text}\n"
            f"📅 {html.escape(str(tx['created_at']))}\n"
            f"🏷️ Status: {html.escape(status_text)}\n\n"
        )
    
    return {
        "text": text,
        "total_count": total_count,
        "current_page": page,
        "total_pages": total_pages,
        "has_prev": page > 0,
        "has_next": page < total_pages - 1
    }


def format_transaction_summary(user_id):
    """
    Format ringkasan statistik transaksi user
    
    Args:
        user_id: ID user
    
    Returns:
        Formatted text untuk ditampilkan
    """
    summary = get_transaction_summary(user_id)
    
    if not summary or summary['total_transactions'] == 0:
        return "📊 Belum ada transaksi."
    
    total_spent = summary['total_spent'] if summary['total_spent'] else 0
    
    text = (
        "📊 <b>Ringkasan Transaksi Kamu</b>\n\n"
        f"📦 Total Transaksi: <b>{summary['total_transactions']}</b>\n"
        f"✅ Disetujui: <b>{summary['approved_count']}</b>\n"
        f"❌ Ditolak: <b>{summary['rejected_count']}</b>\n"
        f"⏳ Tertunda: <b>{summary['pending_count']}</b>\n"
        f"💰 Total Pengeluaran: <b>{_format_rupiah(total_spent)}</b>"
    )
    
    return text
