// lib/models/order_data.dart class OrderData { final String customerName; final double tripDistanceKm; // المسافة الكلية للرحلة بالكيلومتر final String price; final String startLocationAddress; final String endLocationAddress; final double distanceToPassengerKm; // المسافة إلى الراكب بالكيلومتر final int tripDurationMinutes; // مدة الرحلة الكلية بالدقائق (مقربة لأعلى) final int durationToPassengerMinutes; // المدة إلى الراكب بالدقائق (مقربة لأعلى) final String rideType; final String orderId; final String passengerId; final String passengerRate; final String? rawStartCoordinates; final String? rawEndCoordinates; OrderData({ required this.customerName, required this.tripDistanceKm, required this.price, required this.startLocationAddress, required this.endLocationAddress, required this.distanceToPassengerKm, required this.tripDurationMinutes, required this.durationToPassengerMinutes, required this.rideType, required this.orderId, required this.passengerId, required this.passengerRate, this.rawStartCoordinates, this.rawEndCoordinates, }); // دالة مساعدة لتحويل الثواني إلى دقائق وتقريبها لأعلى static int _secondsToRoundedUpMinutes(String secondsString) { final seconds = double.tryParse(secondsString) ?? 0.0; if (seconds <= 0) return 0; return (seconds / 60) .ceil(); // .ceil() لتقريب الكسر لأعلى (مثلاً 0.1 دقيقة تصبح 1 دقيقة) } factory OrderData.fromList(List list) { // بناءً على testList والافتراضات الجديدة: // list[4]: durationToRide (مدة الرحلة الكلية بالثواني) // list[5]: distance (المسافة الكلية للرحلة بالكيلومتر) // list[12]: distanceByPassenger (المسافة إلى الراكب بالمتر) // list[15]: durationToPassenger (المدة إلى الراكب بالثواني) double distanceToPassengerMeters = list.length > 12 ? (double.tryParse(list[12].toString()) ?? 0.0) : 0.0; return OrderData( customerName: list.length > 8 ? list[8].toString() : 'Unknown Customer', tripDistanceKm: list.length > 5 ? (double.tryParse(list[5].toString()) ?? 0.0) : 0.0, price: list.length > 2 ? list[2].toString().split('.')[0] : '0', startLocationAddress: list.length > 29 ? list[29].toString() : 'Unknown Address', endLocationAddress: list.length > 30 ? list[30].toString() : 'Unknown Address', distanceToPassengerKm: distanceToPassengerMeters / 1000.0, // تحويل من متر إلى كيلومتر tripDurationMinutes: list.length > 4 ? _secondsToRoundedUpMinutes(list[4].toString()) : 0, durationToPassengerMinutes: list.length > 15 ? _secondsToRoundedUpMinutes(list[15].toString()) : 0, rideType: list.length > 31 ? _getRideType(list[31].toString()) : 'Unknown', orderId: list.length > 16 ? list[16].toString() : 'N/A', passengerId: list.length > 7 ? list[7].toString() : 'N/A', passengerRate: list.length > 33 ? list[33].toString() : 'N/A', rawStartCoordinates: list.isNotEmpty ? list[0].toString() : null, rawEndCoordinates: list.length > 1 ? list[1].toString() : null, ); } static String _getRideType(String type) { switch (type) { case 'Comfort': return '‏كمفورت ❄️'; case 'Lady': return '‏ليدي 👩'; case 'Speed': return '‏‏‏سبيد 🔻'; case 'Mashwari': return '‏مشواري'; case 'Rayeh Gai': return 'رايح جاي'; default: return type; } } Map? get startCoordinates { if (rawStartCoordinates == null) return null; final parts = rawStartCoordinates!.split(','); if (parts.length == 2) { return { 'lat': double.tryParse(parts[0].trim()), 'lng': double.tryParse(parts[1].trim()) }; } return null; } Map? get endCoordinates { if (rawEndCoordinates == null) return null; final parts = rawEndCoordinates!.split(','); if (parts.length == 2) { return { 'lat': double.tryParse(parts[0].trim()), 'lng': double.tryParse(parts[1].trim()) }; } return null; } Map toMap() { return { 'customerName': customerName, 'tripDistanceKm': tripDistanceKm, 'price': price, 'startLocationAddress': startLocationAddress, 'endLocationAddress': endLocationAddress, 'distanceToPassengerKm': distanceToPassengerKm, 'tripDurationMinutes': tripDurationMinutes, 'durationToPassengerMinutes': durationToPassengerMinutes, 'rideType': rideType, 'orderId': orderId, 'passengerId': passengerId, 'passengerRate': passengerRate, 'rawStartCoordinates': rawStartCoordinates, 'rawEndCoordinates': rawEndCoordinates, }; } }