'use client' import { ArrowDownLeft, ArrowUpRight, CreditCard, Wallet } from 'lucide-react' import { useFinanzasStore } from '@/lib/store' import { formatCurrency, formatShortDate } from '@/lib/utils' import { cn } from '@/lib/utils' interface RecentActivityProps { limit?: number } interface ActivityItem { id: string type: 'fixed_debt' | 'variable_debt' | 'card_payment' title: string amount: number date: string description?: string } export function RecentActivity({ limit = 5 }: RecentActivityProps) { const { fixedDebts, variableDebts, cardPayments, creditCards } = useFinanzasStore() // Combinar todas las actividades const activities: ActivityItem[] = [ // Deudas fijas recientes ...fixedDebts.slice(0, limit).map((debt) => ({ id: debt.id, type: 'fixed_debt' as const, title: debt.name, amount: debt.amount, date: new Date().toISOString(), // Usar fecha actual ya que fixedDebt no tiene fecha de creación description: `Vence el día ${debt.dueDay}`, })), // Deudas variables recientes ...variableDebts.slice(0, limit).map((debt) => ({ id: debt.id, type: 'variable_debt' as const, title: debt.name, amount: debt.amount, date: debt.date, description: debt.notes, })), // Pagos de tarjetas recientes ...cardPayments.slice(0, limit).map((payment) => { const card = creditCards.find((c) => c.id === payment.cardId) return { id: payment.id, type: 'card_payment' as const, title: `Pago - ${card?.name || 'Tarjeta'}`, amount: payment.amount, date: payment.date, description: payment.description, } }), ] // Ordenar por fecha (más recientes primero) const sortedActivities = activities .sort( (a, b) => new Date(b.date).getTime() - new Date(a.date).getTime() ) .slice(0, limit) // Configuración por tipo de actividad const activityConfig = { fixed_debt: { icon: Wallet, label: 'Deuda Fija', color: 'text-amber-400', bgColor: 'bg-amber-400/10', }, variable_debt: { icon: ArrowUpRight, label: 'Gasto', color: 'text-rose-400', bgColor: 'bg-rose-400/10', }, card_payment: { icon: CreditCard, label: 'Pago Tarjeta', color: 'text-blue-400', bgColor: 'bg-blue-400/10', }, } if (sortedActivities.length === 0) { return (

Actividad Reciente

No hay actividad reciente

) } return (

Actividad Reciente

{sortedActivities.map((activity) => { const config = activityConfig[activity.type] const Icon = config.icon return (
{/* Icono */}
{/* Contenido */}

{activity.title}

{activity.type === 'card_payment' ? '+' : '-'} {formatCurrency(activity.amount)}
{config.label} {formatShortDate(activity.date)} {activity.description && ( <> {activity.description} )}
) })}
) }