'use client'; import { useState } from 'react'; import Card from '@/components/ui/Card'; import Button from '@/components/ui/Button'; import { UserPayment } from '@/lib/api'; interface PaymentsTabProps { payments: UserPayment[]; language: string; } export default function PaymentsTab({ payments, language }: PaymentsTabProps) { const [filter, setFilter] = useState<'all' | 'paid' | 'pending'>('all'); const filteredPayments = payments.filter((payment) => { if (filter === 'all') return true; if (filter === 'paid') return payment.status === 'paid'; if (filter === 'pending') return payment.status !== 'paid' && payment.status !== 'refunded'; return true; }); const formatDate = (dateStr: string) => { return new Date(dateStr).toLocaleDateString(language === 'es' ? 'es-ES' : 'en-US', { year: 'numeric', month: 'short', day: 'numeric', timeZone: 'America/Asuncion', }); }; const formatCurrency = (amount: number, currency: string = 'PYG') => { if (currency === 'PYG') { return `${amount.toLocaleString('es-PY')} PYG`; } return `$${amount.toFixed(2)} ${currency}`; }; const getStatusBadge = (status: string) => { const styles: Record = { paid: 'bg-green-100 text-green-800', pending: 'bg-yellow-100 text-yellow-800', pending_approval: 'bg-orange-100 text-orange-800', refunded: 'bg-purple-100 text-purple-800', failed: 'bg-red-100 text-red-800', }; const labels: Record> = { en: { paid: 'Paid', pending: 'Pending', pending_approval: 'Awaiting Approval', refunded: 'Refunded', failed: 'Failed', }, es: { paid: 'Pagado', pending: 'Pendiente', pending_approval: 'Esperando Aprobación', refunded: 'Reembolsado', failed: 'Fallido', }, }; return ( {labels[language]?.[status] || status} ); }; const getProviderLabel = (provider: string) => { const labels: Record> = { en: { lightning: 'Lightning (Bitcoin)', cash: 'Cash', bank_transfer: 'Bank Transfer', tpago: 'TPago', bancard: 'Card', }, es: { lightning: 'Lightning (Bitcoin)', cash: 'Efectivo', bank_transfer: 'Transferencia Bancaria', tpago: 'TPago', bancard: 'Tarjeta', }, }; return labels[language]?.[provider] || provider; }; // Summary calculations const totalPaid = payments .filter((p) => p.status === 'paid') .reduce((sum, p) => sum + Number(p.amount), 0); const totalPending = payments .filter((p) => p.status !== 'paid' && p.status !== 'refunded') .reduce((sum, p) => sum + Number(p.amount), 0); return (
{/* Summary Cards */}

{language === 'es' ? 'Total Pagado' : 'Total Paid'}

{formatCurrency(totalPaid)}

{language === 'es' ? 'Pendiente' : 'Pending'}

{formatCurrency(totalPending)}

{/* Filter Buttons */}
{(['all', 'paid', 'pending'] as const).map((f) => ( ))}
{/* Payments List */} {filteredPayments.length === 0 ? (

{language === 'es' ? 'No hay pagos que mostrar' : 'No payments to display'}

) : (
{filteredPayments.map((payment) => (
{formatCurrency(Number(payment.amount), payment.currency)} {getStatusBadge(payment.status)}
{payment.event && (

{language === 'es' && payment.event.titleEs ? payment.event.titleEs : payment.event.title}

)}

{language === 'es' ? 'Método:' : 'Method:'} {' '} {getProviderLabel(payment.provider)}

{language === 'es' ? 'Fecha:' : 'Date:'} {' '} {formatDate(payment.createdAt)}

{payment.reference && (

{language === 'es' ? 'Referencia:' : 'Reference:'} {' '} {payment.reference}

)}
{payment.invoice && ( )}
))}
)}
); }