import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:intl/intl.dart'; import 'package:ristoris/core/utils.dart'; import '../../../providers/auth_provider.dart'; import '../../../providers/database_provider.dart'; import '../../../database/database.dart'; import '../../widgets/empty_state.dart'; final paymentsProvider = FutureProvider.family, int>((ref, idAgente) { return ref.read(scadenzeDaoProvider).getScadenzePerAgente(idAgente); }); class PaymentsPage extends ConsumerWidget { const PaymentsPage({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { final agente = ref.watch(authProvider).agente; final paysAsync = agente != null ? ref.watch(paymentsProvider(agente.idAgente)) : null; return Scaffold( appBar: AppBar(title: const Text('Scadenze')), body: SafeArea( child: paysAsync?.when( data: (pays) { if (pays.isEmpty) return const EmptyState( icon: Icons.account_balance_wallet_outlined, title: 'Nessuna scadenza'); return ListView.builder( itemCount: pays.length, itemBuilder: (_, i) => _ScadenzaCard(scadenza: pays[i]), ); }, loading: () => const Center(child: CircularProgressIndicator()), error: (e, _) => Center(child: Text('Errore: $e')), ) ?? const Center(child: CircularProgressIndicator()), ), ); } } class _ScadenzaCard extends StatelessWidget { final VScadenzeData scadenza; const _ScadenzaCard({required this.scadenza}); @override Widget build(BuildContext context) { final theme = Theme.of(context); final importo = scadenza.importoScadenza ?? 0; final scaduta = scadenza.dataScadenza != null && DateTime.parse(scadenza.dataScadenza!).isBefore(DateTime.now()); return Card( margin: const EdgeInsets.symmetric(horizontal: 12, vertical: 3), color: scaduta ? Colors.red.shade50 : null, child: ListTile( leading: CircleAvatar( backgroundColor: scaduta ? Colors.red.shade100 : theme.colorScheme.primaryContainer, child: Icon(Icons.account_balance_wallet_outlined, color: scaduta ? Colors.red : theme.colorScheme.primary), ), title: Text('Documento ${scadenza.numPartita ?? ""}'), subtitle: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ if (scadenza.ragioneSociale != null) Text( scadenza.ragioneSociale!, style: theme.textTheme.bodyMedium ?.copyWith(fontWeight: FontWeight.w500), ), if (scadenza.codCliente != null) Text('Cod. ${scadenza.codCliente}', style: theme.textTheme.bodySmall), Text('Scadenza: ${Utils.formatDate(scadenza.dataScadenza)}'), ], ), trailing: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.end, children: [ Text( NumberFormat.currency(locale: 'it', symbol: '€') .format(importo), style: theme.textTheme.titleSmall ?.copyWith(fontWeight: FontWeight.bold)), if (scaduta) Container( padding: const EdgeInsets.symmetric(horizontal: 6, vertical: 1), decoration: BoxDecoration( color: Colors.red, borderRadius: BorderRadius.circular(8)), child: const Text('SCADUTA', style: TextStyle(color: Colors.white, fontSize: 10)), ), ], ), ), ); } }