import React, { useState, useEffect } from 'react'; import Navigation from './components/Navigation'; import Dashboard from './components/Dashboard'; import AssistantChat from './components/AssistantChat'; import { Transaction, CalendarEvent, FamilyMember } from './types'; import { CATEGORIES } from './constants'; const App: React.FC = () => { const [activeTab, setActiveTab] = useState('dashboard'); const [showExpenseForm, setShowExpenseForm] = useState(false); // Mock Initial Data const [transactions, setTransactions] = useState([ { id: '1', date: '2026-03-01', amount: 2500, category: 'Lavoro', payer: FamilyMember.PAPA, description: 'Stipendio base', type: 'INCOME' }, { id: '2', date: '2026-03-05', amount: 450, category: 'Alimentari', payer: FamilyMember.MAMMA, description: 'Spesa settimanale Gourmet', type: 'EXPENSE' }, { id: '3', date: '2026-03-10', amount: 120, category: 'Salute', payer: FamilyMember.NONNI, description: 'Visita oculistica', type: 'EXPENSE' } ]); const [newExpense, setNewExpense] = useState({ amount: '', description: '', category: CATEGORIES.EXPENSE[0], payer: FamilyMember.PAPA }); const [events, setEvents] = useState([ { id: 'e1', title: 'Cena di Pasqua', start: '2026-04-05T20:00:00', end: '2026-04-05T23:00:00', participants: [FamilyMember.TUTTI, FamilyMember.NONNI] }, { id: 'e2', title: 'Allenamento Calcio', start: '2026-03-25T17:00:00', end: '2026-03-25T19:00:00', participants: [FamilyMember.FIGLIO_GRANDE] } ]); const handleAddExpense = (e: React.FormEvent) => { e.preventDefault(); if (!newExpense.amount || !newExpense.description) return; const transaction: Transaction = { id: Date.now().toString(), date: new Date().toISOString().split('T')[0], amount: parseFloat(newExpense.amount), category: newExpense.category, payer: newExpense.payer, description: newExpense.description, type: 'EXPENSE' }; setTransactions([transaction, ...transactions]); setShowExpenseForm(false); setNewExpense({ amount: '', description: '', category: CATEGORIES.EXPENSE[0], payer: FamilyMember.PAPA }); }; const contextData = { transactions, events, familyMembers: Object.keys(FamilyMember), currentDate: '2026-03-15' }; const renderContent = () => { switch (activeTab) { case 'dashboard': return ; case 'finance': return (

Gestione Finanze

Monitoraggio entrate e uscite della famiglia.

{showExpenseForm && (

Registra Uscita

setNewExpense({...newExpense, amount: e.target.value})} className="w-full bg-slate-50 border-none rounded-xl p-3 focus:ring-2 focus:ring-slate-200 outline-none" placeholder="0.00" />
setNewExpense({...newExpense, description: e.target.value})} className="w-full bg-slate-50 border-none rounded-xl p-3 focus:ring-2 focus:ring-slate-200 outline-none" placeholder="es. Cena ristorante" />
)}
{transactions.map(t => (
{t.type === 'INCOME' ? '↓' : '↑'}

{t.description}

{t.payer} • {t.category} • {new Date(t.date).toLocaleDateString('it-IT')}

{t.type === 'INCOME' ? '+' : '-'} € {t.amount.toLocaleString('it-IT')}

))}
); case 'calendar': return (

Calendario 2026

{events.map(e => (

{new Date(e.start).toLocaleDateString('it-IT', { weekday: 'long', day: 'numeric', month: 'long' })}

{e.title}

{new Date(e.start).toLocaleTimeString('it-IT', { hour: '2-digit', minute: '2-digit' })}

{e.participants.map(p => (
{p.substring(0, 1)}
))}
))}
); case 'assistant': return ; default: return ; } }; return (
{renderContent()}
); }; export default App;