import React, { useState } from 'react'; import { DollarSign, TrendingUp, TrendingDown, Calendar, Download, Filter, CreditCard, CheckCircle, Clock, XCircle } from 'lucide-react'; interface Transaction { id: string; type: 'income' | 'expense'; category: string; description: string; amount: number; date: string; status: 'paid' | 'pending' | 'overdue'; client?: string; event?: string; } const MOCK_TRANSACTIONS: Transaction[] = [ { id: '1', type: 'income', category: 'Formatura', description: 'Pagamento Formatura Medicina UFPR', amount: 8500.00, date: '2025-12-01', status: 'paid', client: 'Ana Paula Silva', event: 'Formatura Medicina UFPR' }, { id: '2', type: 'income', category: 'Casamento', description: 'Sinal Casamento Maria & João', amount: 3000.00, date: '2025-12-05', status: 'paid', client: 'Maria Santos', event: 'Casamento Maria & João' }, { id: '3', type: 'expense', category: 'Equipamento', description: 'Manutenção Câmera Canon', amount: 450.00, date: '2025-12-03', status: 'paid' }, { id: '4', type: 'income', category: 'Formatura', description: 'Pagamento Formatura Direito PUC', amount: 7200.00, date: '2025-12-10', status: 'pending', client: 'Carlos Eduardo', event: 'Formatura Direito PUC' }, { id: '5', type: 'expense', category: 'Transporte', description: 'Combustível - Eventos Dezembro', amount: 320.00, date: '2025-12-08', status: 'paid' }, { id: '6', type: 'income', category: 'Evento Corporativo', description: 'Tech Summit 2026', amount: 5500.00, date: '2025-12-15', status: 'pending', client: 'TechCorp Ltda', event: 'Tech Summit' }, { id: '7', type: 'expense', category: 'Software', description: 'Assinatura Adobe Creative Cloud', amount: 180.00, date: '2025-12-01', status: 'paid' }, { id: '8', type: 'income', category: 'Formatura', description: 'Saldo Final Formatura Engenharia', amount: 4500.00, date: '2025-11-20', status: 'overdue', client: 'Roberto Mendes', event: 'Formatura Engenharia UTFPR' } ]; export const FinancePage: React.FC = () => { const [filterType, setFilterType] = useState<'all' | 'income' | 'expense'>('all'); const [filterStatus, setFilterStatus] = useState<'all' | 'paid' | 'pending' | 'overdue'>('all'); const filteredTransactions = MOCK_TRANSACTIONS.filter(transaction => { const matchesType = filterType === 'all' || transaction.type === filterType; const matchesStatus = filterStatus === 'all' || transaction.status === filterStatus; return matchesType && matchesStatus; }); const totalIncome = MOCK_TRANSACTIONS .filter(t => t.type === 'income' && t.status === 'paid') .reduce((sum, t) => sum + t.amount, 0); const totalExpense = MOCK_TRANSACTIONS .filter(t => t.type === 'expense' && t.status === 'paid') .reduce((sum, t) => sum + t.amount, 0); const pendingIncome = MOCK_TRANSACTIONS .filter(t => t.type === 'income' && (t.status === 'pending' || t.status === 'overdue')) .reduce((sum, t) => sum + t.amount, 0); const balance = totalIncome - totalExpense; const getStatusIcon = (status: Transaction['status']) => { switch (status) { case 'paid': return ; case 'pending': return ; case 'overdue': return ; } }; const getStatusColor = (status: Transaction['status']) => { switch (status) { case 'paid': return 'bg-green-100 text-green-800'; case 'pending': return 'bg-yellow-100 text-yellow-800'; case 'overdue': return 'bg-red-100 text-red-800'; } }; const getStatusLabel = (status: Transaction['status']) => { switch (status) { case 'paid': return 'Pago'; case 'pending': return 'Pendente'; case 'overdue': return 'Atrasado'; } }; const formatCurrency = (value: number) => { return new Intl.NumberFormat('pt-BR', { style: 'currency', currency: 'BRL' }).format(value); }; const formatDate = (dateString: string) => { const date = new Date(dateString + 'T00:00:00'); return date.toLocaleDateString('pt-BR', { day: '2-digit', month: 'short', year: 'numeric' }); }; return (
{/* Header */}

Financeiro

Acompanhe receitas, despesas e fluxo de caixa

{/* Stats Cards */}

Receitas

{formatCurrency(totalIncome)}

Pagamentos recebidos

Despesas

{formatCurrency(totalExpense)}

Gastos do período

Saldo

= 0 ? 'text-brand-gold' : 'text-red-600'}`}> {formatCurrency(balance)}

Receitas - Despesas

A Receber

{formatCurrency(pendingIncome)}

Pagamentos pendentes

{/* Filters */}
{/* Transactions List */}

Transações

{filteredTransactions.length === 0 ? (

Nenhuma transação encontrada

) : ( filteredTransactions.map((transaction) => (
{transaction.type === 'income' ? ( ) : ( )}

{transaction.description}

{transaction.category} {transaction.client && ( <> {transaction.client} )}

{transaction.type === 'income' ? '+' : '-'} {formatCurrency(transaction.amount)}

{formatDate(transaction.date)}
{getStatusIcon(transaction.status)} {getStatusLabel(transaction.status)}
)) )}
); };