import 'package:wanisclient/models/ride_stop_model.dart'; class RideDto { final int id; final int? driverId; final int userId; final double averagedriverrating; final double distancekm; final String startLocation; final String riderusername; final String riderphonenumber; final String endLocation; final List stops; final DateTime? rideStartTime; final DateTime? rideEndTime; final double? durationInMinutes; final double? totalPrice; String rideStatus; final String rideType; final String geometryhash; final String encodedpolyline; final String ridername; final String paymenttype; final String? drivername; final String? driverimageurl; final String? drivercarmodel; final String? licenseplate; final String? driverphonenumber; final String? driverusername; final String userimageurl; final String startLocationName; final String endLocationName; final String currentridetypesocket; final String? couponcode; final double? couponvalue; final double? couponpercentage; final bool? iskidsride; final DateTime timestamp; final String? rideclienttype; final int? programid; RideDto({ required this.id, this.drivername, this.driverimageurl, required this.currentridetypesocket, required this.startLocationName, required this.riderphonenumber, required this.endLocationName, this.drivercarmodel, this.licenseplate, this.driverphonenumber, this.driverusername, required this.userimageurl, required this.riderusername, this.driverId, required this.userId, required this.geometryhash, required this.encodedpolyline, required this.averagedriverrating, required this.distancekm, required this.startLocation, required this.endLocation, required this.stops, required this.ridername, required this.paymenttype, this.rideStartTime, this.rideEndTime, this.durationInMinutes, this.totalPrice, required this.rideStatus, required this.rideType, this.couponcode, this.couponvalue, this.couponpercentage, this.iskidsride, required this.timestamp, this.rideclienttype, this.programid, }); factory RideDto.fromJson(Map json) { return RideDto( id: json['id'] ?? 0, programid: json['programid'] , drivername: json['driverName'] ?? "not_exist", currentridetypesocket: json['currentridetypesocket'] ?? "not_exist", startLocationName: json['startLocationName'] ?? "not_exist", endLocationName: json['endLocationName'] ?? "not_exist", driverusername: json['driverUserName'] ?? "not_exist", userimageurl: json['userimageurl'] ?? "not_exist", riderphonenumber: json['riderphonenumber'] ?? "not_exist", driverimageurl: json['driverimageurl'] ?? "not_exist", drivercarmodel: json['drivercarmodel'] ?? "not_exist", licenseplate: json['licenseplate'] ?? "not_exist", driverphonenumber: json['driverphonenumber'] ?? "not_exist", driverId: json['driverId'] != null ? json['driverId'] as int : null, riderusername: json['riderusername'], ridername: json['ridername'], paymenttype: json['paymenttype'], iskidsride: json['iskidsride'] ?? false, userId: json['userId'] ?? 0, startLocation: json['startLocation'] ?? '', endLocation: json['endLocation'] ?? '', stops: (json['stops'] as List) .map((stop) => RideStopDto.fromJson(stop)) .toList(), rideStartTime: json['rideStartTime'] != null ? DateTime( // Use DateTime constructor for local time json['rideStartTime'][0], json['rideStartTime'][1], json['rideStartTime'][2], json['rideStartTime'][3], json['rideStartTime'][4], ) : null, rideEndTime: json['rideEndTime'] != null ? DateTime.parse(json['rideEndTime']) : null, durationInMinutes: json['durationInMinutes'] ?? 0.0, totalPrice: json['totalPrice']?.toDouble(), rideStatus: json['rideStatus'] ?? '', rideType: json['rideType'] ?? '', geometryhash: json['geometryhash'] ?? '', encodedpolyline: json['encodedpolyline'] ?? '', averagedriverrating: json['averagedriverrating'] ?? 0.0, distancekm: json['distancekm'] ?? 0.0, couponcode: json['couponcode'], couponvalue: json['couponvalue']??0.0, couponpercentage: json['couponpercentage']??0.0, rideclienttype: json['rideclienttype'] != null ? json['rideclienttype']:"USER", timestamp: DateTime.fromMillisecondsSinceEpoch(json['timestamp']?? DateTime.now()), ); } Map toJson() { return { 'id': id, 'driverId': driverId, 'userId': userId, 'startLocation': startLocation, 'endLocation': endLocation, 'distancekm': distancekm, 'encodedpolyline': encodedpolyline, 'averagedriverrating': averagedriverrating, 'stops': stops.map((stop) => stop.toJson()).toList(), 'rideStartTime': rideStartTime?.toIso8601String(), 'rideEndTime': rideEndTime?.toIso8601String(), 'durationInMinutes': durationInMinutes, 'totalPrice': totalPrice, 'rideStatus': rideStatus, 'rideType': rideType, 'riderusername': riderusername, 'couponcode': couponcode, 'couponvalue': couponvalue, 'couponpercentage': couponpercentage, 'iskidsride': iskidsride, 'rideclienttype': rideclienttype, 'timestamp': timestamp.millisecondsSinceEpoch, }; } @override String toString() { return 'RideDto{id: $id, driverId: $driverId, userId: $userId, averagedriverrating: $averagedriverrating, distancekm: $distancekm, startLocation: $startLocation, riderusername: $riderusername, riderphonenumber: $riderphonenumber, endLocation: $endLocation, stops: $stops, rideStartTime: $rideStartTime, rideEndTime: $rideEndTime, durationInMinutes: $durationInMinutes, totalPrice: $totalPrice, rideStatus: $rideStatus, rideType: $rideType, geometryhash: $geometryhash, encodedpolyline: $encodedpolyline, ridername: $ridername, paymenttype: $paymenttype, drivername: $drivername, driverimageurl: $driverimageurl, drivercarmodel: $drivercarmodel, licenseplate: $licenseplate, driverphonenumber: $driverphonenumber, driverusername: $driverusername, userimageurl: $userimageurl, startLocationName: $startLocationName, endLocationName: $endLocationName, currentridetypesocket: $currentridetypesocket, couponcode: $couponcode, couponvalue: $couponvalue, couponpercentage: $couponpercentage, iskidsride: $iskidsride, rideclienttype: $rideclienttype, programid: $programid, timestamp: $timestamp}'; } }