'use client' import { useState } from 'react' import { useFinanzasStore } from '@/lib/store' import { X, CreditCard, DollarSign, Calendar, FileText, Layers } from 'lucide-react' import { cn } from '@/lib/utils' interface AddPaymentModalProps { isOpen: boolean onClose: () => void } export function AddPaymentModal({ isOpen, onClose }: AddPaymentModalProps) { const cards = useFinanzasStore((state) => state.creditCards) const addCardPayment = useFinanzasStore((state) => state.addCardPayment) const [selectedCardId, setSelectedCardId] = useState(cards[0]?.id || '') const [description, setDescription] = useState('') const [amount, setAmount] = useState('') const [dateStr, setDateStr] = useState(new Date().toISOString().split('T')[0]) const [hasInstallments, setHasInstallments] = useState(false) const [installments, setInstallments] = useState('1') const [totalInstallments, setTotalInstallments] = useState('12') if (!isOpen) return null // Ensure card selection if cards exist if (!selectedCardId && cards.length > 0) { setSelectedCardId(cards[0].id) } const handleSubmit = (e: React.FormEvent) => { e.preventDefault() if (!description || !amount || !selectedCardId) return addCardPayment({ cardId: selectedCardId, amount: parseFloat(amount), date: new Date(dateStr).toISOString(), description, installments: hasInstallments ? { current: parseInt(installments), total: parseInt(totalInstallments) } : undefined }) // Reset setDescription('') setAmount('') setHasInstallments(false) setInstallments('1') setTotalInstallments('12') onClose() } return (
{/* Header */}

Registrar Consumo / Pago

{cards.length === 0 ? (

No tienes tarjetas registradas

Debes agregar una tarjeta antes de registrar pagos.

) : (
{/* Card Selection */}
{cards.map((card) => (
setSelectedCardId(card.id)} className={cn( "cursor-pointer p-3 rounded-lg border flex items-center gap-3 transition-all", selectedCardId === card.id ? "border-cyan-500 bg-cyan-500/10 ring-1 ring-cyan-500" : "border-slate-800 bg-slate-950 hover:border-slate-700" )} >
{card.name} **** {card.lastFourDigits}
))}
{/* Amount */}
$ setAmount(e.target.value)} className="w-full pl-8 pr-4 py-3 bg-slate-950 border border-slate-800 rounded-lg focus:ring-2 focus:ring-cyan-500/50 focus:border-cyan-500 text-white text-lg font-mono outline-none" required autoFocus />
{/* Description */}
setDescription(e.target.value)} className="w-full px-4 py-2.5 bg-slate-950 border border-slate-800 rounded-lg focus:ring-2 focus:ring-cyan-500/50 focus:border-cyan-500 text-white outline-none" required />
{/* Date */}
setDateStr(e.target.value)} className="w-full px-4 py-2.5 bg-slate-950 border border-slate-800 rounded-lg focus:ring-2 focus:ring-cyan-500/50 focus:border-cyan-500 text-white outline-none [color-scheme:dark]" required />
{/* Installments Toggle */}
setHasInstallments(!hasInstallments)}>
{hasInstallments && }
Es una compra en cuotas
{/* Installments Inputs */} {hasInstallments && (
setInstallments(e.target.value)} className="w-full px-4 py-2.5 bg-slate-950 border border-slate-800 rounded-lg text-white" />
setTotalInstallments(e.target.value)} className="w-full px-4 py-2.5 bg-slate-950 border border-slate-800 rounded-lg text-white" />
)}
)}
) }