'use client' import { useState, useMemo } from 'react' import { useFinanzasStore } from '@/lib/store' import { CreditCardWidget } from './CreditCardWidget' import { CreditCardForm } from './CreditCardForm' import { CardPaymentForm } from './CardPaymentForm' import { MiniCard } from './MiniCard' import { CreditCard, CardPayment } from '@/lib/types' import { formatCurrency, formatShortDate, getMonthName } from '@/lib/utils' import { Plus, CreditCard as CreditCardIcon, Receipt, Trash2 } from 'lucide-react' export function CardSection() { const { creditCards, cardPayments, currentMonth, currentYear, addCreditCard, updateCreditCard, deleteCreditCard, addCardPayment, deleteCardPayment, } = useFinanzasStore() const [showCardForm, setShowCardForm] = useState(false) const [editingCard, setEditingCard] = useState(null) const [selectedCardId, setSelectedCardId] = useState('') const [showPaymentForm, setShowPaymentForm] = useState(false) // Filter payments for current month const currentMonthPayments = useMemo(() => { return cardPayments.filter((payment) => { const paymentDate = new Date(payment.date) return ( paymentDate.getMonth() + 1 === currentMonth && paymentDate.getFullYear() === currentYear ) }) }, [cardPayments, currentMonth, currentYear]) const handleCardSubmit = (data: Omit) => { if (editingCard) { updateCreditCard(editingCard.id, data) setEditingCard(null) } else { addCreditCard(data) } setShowCardForm(false) } const handleEditCard = (card: CreditCard) => { setEditingCard(card) setShowCardForm(true) } const handleDeleteCard = (cardId: string) => { if (window.confirm('¿Estás seguro de que deseas eliminar esta tarjeta?')) { deleteCreditCard(cardId) if (selectedCardId === cardId) { setSelectedCardId('') setShowPaymentForm(false) } } } const handlePaymentSubmit = (data: { description: string amount: number date: string installments?: { current: number; total: number } }) => { addCardPayment({ cardId: selectedCardId, ...data, }) setShowPaymentForm(false) } const handleDeletePayment = (paymentId: string) => { if (window.confirm('¿Estás seguro de que deseas eliminar este pago?')) { deleteCardPayment(paymentId) } } const getCardById = (cardId: string): CreditCard | undefined => { return creditCards.find((card) => card.id === cardId) } const getCardTotalPayments = (cardId: string): number => { return currentMonthPayments .filter((payment) => payment.cardId === cardId) .reduce((total, payment) => total + payment.amount, 0) } return (
{/* Header */}

Tarjetas de Crédito

{getMonthName(currentMonth)} {currentYear}

{/* Cards Grid */} {creditCards.length === 0 ? (

No tienes tarjetas registradas

Agrega tu primera tarjeta para comenzar a gestionar tus pagos

) : (
{creditCards.map((card) => ( handleEditCard(card)} onDelete={() => handleDeleteCard(card.id)} /> ))}
)} {/* Card Form Modal */} {showCardForm && (
{ setShowCardForm(false) setEditingCard(null) }} />
)} {/* Payment Section */} {creditCards.length > 0 && (
{/* Register Payment */}

Registrar Pago

{/* Card Selector */}
{creditCards.map((card) => ( { setSelectedCardId(card.id) setShowPaymentForm(true) }} /> ))}
{/* Payment Form */} {showPaymentForm && selectedCardId && ( { setShowPaymentForm(false) setSelectedCardId('') }} /> )}
{/* Recent Payments */}

Pagos del Mes

Total: {formatCurrency( currentMonthPayments.reduce((sum, p) => sum + p.amount, 0) )}

{currentMonthPayments.length === 0 ? (

No hay pagos registrados este mes

) : (
{currentMonthPayments .sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime()) .map((payment) => { const card = getCardById(payment.cardId) return (
{card && (
)}

{payment.description}

{card?.name} • {formatShortDate(payment.date)} {payment.installments && ( Cuota {payment.installments.current}/{payment.installments.total} )}

{formatCurrency(payment.amount)}
) })}
)} {/* Summary by Card */} {currentMonthPayments.length > 0 && (

Resumen por tarjeta

{creditCards.map((card) => { const total = getCardTotalPayments(card.id) if (total === 0) return null return (
{card.name}
{formatCurrency(total)}
) })}
)}
)}
) }