'use client' import { useState, useMemo } from 'react' import { useFinanzasStore } from '@/lib/store' import { MonthlyBudget } from '@/lib/types' import { BudgetForm } from './BudgetForm' import { BudgetRing } from './BudgetRing' import { BudgetProgress } from './BudgetProgress' import { BudgetCard } from './BudgetCard' import { cn, formatCurrency, getMonthName, calculateTotalFixedDebts, calculateTotalVariableDebts, calculateCardPayments } from '@/lib/utils' import { Plus, Wallet, Edit3, TrendingUp, TrendingDown, AlertCircle } from 'lucide-react' export function BudgetSection() { const [isModalOpen, setIsModalOpen] = useState(false) const [isEditing, setIsEditing] = useState(false) const { monthlyBudgets, fixedDebts, variableDebts, cardPayments, currentMonth, currentYear, setMonthlyBudget, } = useFinanzasStore() const currentBudget = useMemo(() => { return monthlyBudgets.find( (b) => b.month === currentMonth && b.year === currentYear ) }, [monthlyBudgets, currentMonth, currentYear]) const fixedExpenses = useMemo(() => calculateTotalFixedDebts(fixedDebts), [fixedDebts]) const variableExpenses = useMemo(() => calculateTotalVariableDebts(variableDebts), [variableDebts]) const cardExpenses = useMemo(() => calculateCardPayments(cardPayments), [cardPayments]) const totalSpent = fixedExpenses + variableExpenses + cardExpenses const totalIncome = currentBudget?.totalIncome || 0 const savingsGoal = currentBudget?.savingsGoal || 0 const availableForExpenses = totalIncome - savingsGoal const remaining = availableForExpenses - totalSpent const daysInMonth = new Date(currentYear, currentMonth, 0).getDate() const currentDay = new Date().getDate() const daysRemaining = daysInMonth - currentDay const dailySpendRate = currentDay > 0 ? totalSpent / currentDay : 0 const projectedEndOfMonth = totalSpent + dailySpendRate * daysRemaining const handleCreateBudget = () => { setIsEditing(false) setIsModalOpen(true) } const handleEditBudget = () => { setIsEditing(true) setIsModalOpen(true) } const handleCloseModal = () => { setIsModalOpen(false) setIsEditing(false) } const handleSubmit = (budget: MonthlyBudget) => { setMonthlyBudget(budget) handleCloseModal() } if (!currentBudget) { return (

Presupuesto Mensual

{getMonthName(currentMonth)} {currentYear}

No hay presupuesto para este mes

Crea un presupuesto para comenzar a gestionar tus finanzas

{isModalOpen && (

Nuevo presupuesto

)}
) } return (
{/* Header */}

Presupuesto Mensual

{getMonthName(currentMonth)} {currentYear}

{/* Summary Cards */}
availableForExpenses ? 'down' : 'neutral'} color={totalSpent > availableForExpenses ? 'text-red-400' : 'text-amber-400'} /> 0 ? 'up' : 'down'} color={remaining > 0 ? 'text-emerald-400' : 'text-red-400'} />
{/* Budget Ring and Breakdown */}
{/* Ring */}
{/* Breakdown */}

Desglose de gastos

{/* Projection */}
availableForExpenses ? 'bg-red-500/10' : 'bg-emerald-500/10' )}> {projectedEndOfMonth > availableForExpenses ? ( ) : ( )}

Proyección

A tu ritmo actual de gasto ({formatCurrency(dailySpendRate)}/día), {projectedEndOfMonth > availableForExpenses ? ( {' '}terminarás el mes con un déficit de {formatCurrency(projectedEndOfMonth - availableForExpenses)}. ) : ( {' '}terminarás el mes con un superávit de {formatCurrency(availableForExpenses - projectedEndOfMonth)}. )}

Quedan {daysRemaining} días en el mes

{/* Modal */} {isModalOpen && (

{isEditing ? 'Editar presupuesto' : 'Nuevo presupuesto'}

)}
) }