import 'package:flutter/material.dart'; import '../models/econtrol_model.dart'; class GasStationCard extends StatelessWidget { final EControlModel station; final int index; const GasStationCard({super.key, required this.station, required this.index}); Color _getPriceColor(double? price) { if (price == null) return Colors.grey; if (price < 1.50) return Colors.green; if (price < 1.70) return Colors.orange; return Colors.red; } String _formatDistance(double? distance) { if (distance == null) return 'N/A'; if (distance < 1) { return '${(distance * 1000).toStringAsFixed(0)} m'; } else { return '${distance.toStringAsFixed(2)} km'; } } @override Widget build(BuildContext context) { final price = station.prices?.isNotEmpty == true ? station.prices!.first.amount : null; final priceLabel = station.prices?.isNotEmpty == true ? station.prices!.first.label : ''; return Card( margin: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), elevation: 4, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(16)), child: Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(16), gradient: LinearGradient( begin: Alignment.topLeft, end: Alignment.bottomRight, colors: [Colors.white, Colors.grey[50]!], ), ), child: Padding( padding: const EdgeInsets.all(16), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ // Header Row with Position and Status Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Container( padding: const EdgeInsets.symmetric( horizontal: 12, vertical: 6, ), decoration: BoxDecoration( color: Colors.blueGrey[700], borderRadius: BorderRadius.circular(20), ), child: Text( '#${index + 1}', style: const TextStyle( color: Colors.white, fontWeight: FontWeight.bold, fontSize: 12, ), ), ), Container( padding: const EdgeInsets.symmetric( horizontal: 12, vertical: 6, ), decoration: BoxDecoration( color: station.open == true ? Colors.green[400] : Colors.red[400], borderRadius: BorderRadius.circular(20), ), child: Row( mainAxisSize: MainAxisSize.min, children: [ Icon( station.open == true ? Icons.check_circle : Icons.cancel, color: Colors.white, size: 16, ), const SizedBox(width: 4), Text( station.open == true ? 'Geöffnet' : 'Geschlossen', style: const TextStyle( color: Colors.white, fontWeight: FontWeight.bold, fontSize: 12, ), ), ], ), ), ], ), const SizedBox(height: 12), // Station Name Text( station.name ?? 'Unbekannte Tankstelle', style: const TextStyle( fontSize: 20, fontWeight: FontWeight.bold, color: Colors.black87, ), ), const SizedBox(height: 8), // Address Row( children: [ Icon( Icons.location_on, size: 16, color: Colors.blueGrey[600], ), const SizedBox(width: 4), Expanded( child: Text( '${station.location?.address ?? ''}, ' '${station.location?.postalCode ?? ''} ' '${station.location?.city ?? ''}', style: TextStyle(fontSize: 14, color: Colors.grey[700]), maxLines: 2, overflow: TextOverflow.ellipsis, ), ), ], ), const SizedBox(height: 12), // Price and Distance Row Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ // Price if (price != null) Container( padding: const EdgeInsets.symmetric( horizontal: 16, vertical: 10, ), decoration: BoxDecoration( color: _getPriceColor(price).withAlpha(50), borderRadius: BorderRadius.circular(12), border: Border.all( color: _getPriceColor(price), width: 2, ), ), child: Row( children: [ Icon( Icons.local_gas_station, color: _getPriceColor(price), size: 24, ), const SizedBox(width: 8), Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( '€ ${price.toStringAsFixed(3)}', style: TextStyle( fontSize: 22, fontWeight: FontWeight.bold, color: _getPriceColor(price), ), ), if (priceLabel?.isNotEmpty == true) Text( priceLabel!, style: TextStyle( fontSize: 10, color: Colors.grey[600], ), ), ], ), ], ), ), // Distance Container( padding: const EdgeInsets.symmetric( horizontal: 16, vertical: 10, ), decoration: BoxDecoration( color: Colors.blue[50], borderRadius: BorderRadius.circular(12), ), child: Row( children: [ Icon( Icons.navigation, color: Colors.blue[700], size: 20, ), const SizedBox(width: 8), Text( _formatDistance(station.distance), style: TextStyle( fontSize: 16, fontWeight: FontWeight.bold, color: Colors.blue[700], ), ), ], ), ), ], ), ], ), ), ), ); } }