import 'package:flutter/material.dart'; import '../models/customer.dart'; import '../theme/app_theme.dart'; import '../screens/customer_detail_screen.dart'; class CustomerPreviewSheet extends StatelessWidget { final Customer customer; final VoidCallback? onClose; const CustomerPreviewSheet({ super.key, required this.customer, this.onClose, }); String _formatDate(DateTime? date) { if (date == null) return '-'; final day = date.day.toString().padLeft(2, '0'); final month = date.month.toString().padLeft(2, '0'); return '$day.$month.${date.year}'; } @override Widget build(BuildContext context) { return Container( decoration: const BoxDecoration( color: Colors.white, borderRadius: BorderRadius.vertical(top: Radius.circular(24)), boxShadow: [ BoxShadow( color: Colors.black12, blurRadius: 16, offset: Offset(0, -4), ), ], ), padding: const EdgeInsets.fromLTRB(20, 12, 20, 24), child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.stretch, children: [ // Drag handle indicator Center( child: Container( width: 36, height: 4, decoration: BoxDecoration( color: AppTheme.cardBorder, borderRadius: BorderRadius.circular(2), ), ), ), const SizedBox(height: 16), // Customer info header row Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ CircleAvatar( radius: 24, backgroundColor: AppTheme.primaryBlue, child: const Icon( Icons.person, color: Colors.white, size: 28, ), ), const SizedBox(width: 14), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( customer.name, style: const TextStyle( fontSize: 18, fontWeight: FontWeight.bold, color: AppTheme.textPrimary, ), ), const SizedBox(height: 2), Text( customer.street, style: const TextStyle( fontSize: 13, color: AppTheme.textSecondary, ), ), Text( '${customer.zipCode} ${customer.city}', style: const TextStyle( fontSize: 13, color: AppTheme.textSecondary, ), ), ], ), ), Text( '${customer.distanceKm.toStringAsFixed(1).replaceAll('.', ',')} km', style: const TextStyle( fontSize: 14, fontWeight: FontWeight.bold, color: AppTheme.primaryBlue, ), ), ], ), const SizedBox(height: 16), // Metric Cards Row Row( children: [ _buildMetricCard( label: 'Kundennr.', value: customer.customerNumber, ), const SizedBox(width: 10), _buildMetricCard( label: 'Letzter Auftrag', value: _formatDate(customer.lastOrderDate), ), const SizedBox(width: 10), _buildMetricCard( label: 'Offene Aufträge', value: customer.openOrdersCount.toString(), ), ], ), const SizedBox(height: 16), // Detail Action Button ElevatedButton( onPressed: () { Navigator.of(context).push( MaterialPageRoute( builder: (context) => CustomerDetailScreen(customer: customer), ), ); }, style: ElevatedButton.styleFrom( backgroundColor: AppTheme.primaryDark, foregroundColor: Colors.white, elevation: 0, padding: const EdgeInsets.symmetric(vertical: 14), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12), ), ), child: const Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Text( 'Kundendetails anzeigen', style: TextStyle( fontSize: 15, fontWeight: FontWeight.w600, ), ), SizedBox(width: 8), Icon(Icons.chevron_right, size: 20), ], ), ), ], ), ); } Widget _buildMetricCard({required String label, required String value}) { return Expanded( child: Container( padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 8), decoration: BoxDecoration( color: AppTheme.backgroundLight, borderRadius: BorderRadius.circular(10), border: Border.all(color: AppTheme.cardBorder), ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( label, style: const TextStyle( fontSize: 11, color: AppTheme.textSecondary, ), maxLines: 1, overflow: TextOverflow.ellipsis, ), const SizedBox(height: 4), Text( value, style: const TextStyle( fontSize: 14, fontWeight: FontWeight.bold, color: AppTheme.textPrimary, ), maxLines: 1, overflow: TextOverflow.ellipsis, ), ], ), ), ); } }