import { useState } from 'react'; import { useTranslation } from 'react-i18next'; import { Tag, TrendingDown, Plus, Trash2, RotateCcw, History, X, DollarSign, MessageSquare, Calendar } from 'lucide-react'; import type { CategoryWithRemaining } from '../../services'; import { categoryService, expenseService } from '../../services'; import { useExpenses } from '../../hooks'; import { format } from '../../utils/format'; import { Button, Input } from '../ui'; interface CategoryCardProps { category: CategoryWithRemaining; familyId: number; onDelete: (categoryId: number) => void; onReset: (categoryId: number) => void; onUpdate: () => void; } export function CategoryCard({ category, familyId, onDelete, onReset, onUpdate }: CategoryCardProps) { const { t } = useTranslation(); const [showAddExpense, setShowAddExpense] = useState(false); const [showHistory, setShowHistory] = useState(false); const [expenseAmount, setExpenseAmount] = useState(''); const [expenseDescription, setExpenseDescription] = useState(''); const { expenses, loadExpenses, createExpense } = useExpenses(familyId, category.id); const handleAddExpense = async () => { if (!expenseAmount) return; try { await createExpense({ amount: parseFloat(expenseAmount), description: expenseDescription || undefined, }); setExpenseAmount(''); setExpenseDescription(''); setShowAddExpense(false); onUpdate(); } catch (error) { console.error(error); } }; const handleShowHistory = async () => { if (!showHistory) { await loadExpenses(); } setShowHistory(!showHistory); }; const progress = categoryService.calculateProgress(category.limit_amount, category.remaining_limit); const progressColor = categoryService.getProgressColor(progress); return (
{t('category.limit')}: {format.currency(category.limit_amount)}
{t('expense.noHistory')}
) : (