'use client'; import { useState } from 'react'; import Link from 'next/link'; import Card from '@/components/ui/Card'; import Button from '@/components/ui/Button'; import { UserTicket } from '@/lib/api'; interface TicketsTabProps { tickets: UserTicket[]; language: string; } export default function TicketsTab({ tickets, language }: TicketsTabProps) { const [filter, setFilter] = useState<'all' | 'upcoming' | 'past'>('all'); const now = new Date(); const filteredTickets = tickets.filter((ticket) => { if (filter === 'all') return true; const eventDate = ticket.event?.startDatetime ? new Date(ticket.event.startDatetime) : null; if (filter === 'upcoming') return eventDate && eventDate > now; if (filter === 'past') return eventDate && eventDate <= now; 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 = { confirmed: 'bg-green-100 text-green-800', checked_in: 'bg-blue-100 text-blue-800', pending: 'bg-yellow-100 text-yellow-800', cancelled: 'bg-red-100 text-red-800', }; const labels: Record> = { en: { confirmed: 'Confirmed', checked_in: 'Checked In', pending: 'Pending', cancelled: 'Cancelled', }, es: { confirmed: 'Confirmado', checked_in: 'Registrado', pending: 'Pendiente', cancelled: 'Cancelado', }, }; return ( {labels[language]?.[status] || status} ); }; return (
{/* Filter Buttons */}
{(['all', 'upcoming', 'past'] as const).map((f) => ( ))}
{/* Tickets List */} {filteredTickets.length === 0 ? (

{language === 'es' ? 'No tienes entradas' : 'You have no tickets'}

) : (
{filteredTickets.map((ticket) => (
{/* Event Image */} {ticket.event?.bannerUrl && (
{ticket.event.title}
)} {/* Ticket Info */}

{language === 'es' && ticket.event?.titleEs ? ticket.event.titleEs : ticket.event?.title || 'Event'}

{getStatusBadge(ticket.status)}
{ticket.event?.startDatetime && (

{language === 'es' ? 'Fecha:' : 'Date:'} {' '} {formatDate(ticket.event.startDatetime)}

)} {ticket.event?.location && (

{language === 'es' ? 'Lugar:' : 'Location:'} {' '} {ticket.event.location}

)} {ticket.payment && (

{language === 'es' ? 'Pago:' : 'Payment:'} {' '} {formatCurrency(ticket.payment.amount, ticket.payment.currency)} - {ticket.payment.status === 'paid' ? (language === 'es' ? 'Pagado' : 'Paid') : (language === 'es' ? 'Pendiente' : 'Pending')}

)}
{/* Actions */}
{(ticket.status === 'confirmed' || ticket.status === 'checked_in') && ( )} {ticket.invoice && ( )}
))}
)}
); }