for pin code we always send it fro appication localsession But if 30 min passed we adsk hi to enter the pin codea gain then upate klocalsession///thi i for flexy for driver or client whenever we set the ride to in progress we update tota rides add birthdate for river an cient test tota rides client°+1 after confire_driver.php fetch river perforance fro river_performance` async function createRide() { const rideData = { client_id: parseInt(document.getElementById('clientId').value) || 1, wilaya_id: 16, pickup_address: document.getElementById('pickupAddress').value, pickup_lat: parseFloat(document.getElementById('pickupLat').value), pickup_lng: parseFloat(document.getElementById('pickupLng').value), dropoff_address: document.getElementById('dropoffAddress').value, dropoff_lat: parseFloat(document.getElementById('dropoffLat').value), dropoff_lng: parseFloat(document.getElementById('dropoffLng').value), distance_km: 5.4, duration_min: 12, base_fare: 100, distance_fare: 108, time_fare: 60, surge_multiplier: 1, total_fare: 268, payment_method: document.getElementById('paymentMethod').value, status: "pending" }; try { const result = await rideManager.createRide(rideData); showToast('Ride created successfully!', 'success'); closeModal('createRideModal'); loadRecentRides(); if (result.ride && result.ride.id) { currentRideId = result.ride.id; } } catch (error) { showToast('Error creating ride: ' + error.message, 'error'); } } // ========== RIDE ACTION FUNCTIONS ========== async function acceptRide() { const rideId = parseInt(document.getElementById('actionRideId').value) || currentRideId; try { const result = await rideManager.acceptRide(rideId); showToast('Ride accepted successfully!', 'success'); loadRecentRides(); } catch (error) { showToast('Error accepting ride: ' + error.message, 'error'); } } async function confirmDriver() { const rideId = parseInt(document.getElementById('actionRideId').value) || currentRideId; try { const result = await rideManager.confirmDriver(rideId); showToast('Driver confirmed!', 'success'); loadRecentRides(); } catch (error) { showToast('Error confirming driver: ' + error.message, 'error'); } } async function rejectDriver() { const rideId = parseInt(document.getElementById('actionRideId').value) || currentRideId; try { const result = await rideManager.rejectDriver(rideId); showToast('Driver rejected!', 'success'); loadRecentRides(); } catch (error) { showToast('Error rejecting driver: ' + error.message, 'error'); } } async function driverArrived() { const rideId = parseInt(document.getElementById('actionRideId').value) || currentRideId; try { const result = await rideManager.driverArrived(rideId); showToast('Driver arrived marked!', 'success'); loadRecentRides(); } catch (error) { showToast('Error marking arrival: ' + error.message, 'error'); } } async function startRide() { const rideId = parseInt(document.getElementById('actionRideId').value) || currentRideId; try { const result = await rideManager.startRide(rideId); showToast('Ride started!', 'success'); loadRecentRides(); } catch (error) { showToast('Error starting ride: ' + error.message, 'error'); } } async function completeRide() { const rideId = parseInt(document.getElementById('actionRideId').value) || currentRideId; try { const result = await rideManager.completeRide(rideId); showToast('Ride completed!', 'success'); loadRecentRides(); } catch (error) { showToast('Error completing ride: ' + error.message, 'error'); } } async function cancelRide() { const rideId = parseInt(document.getElementById('actionRideId').value) || currentRideId; try { const result = await rideManager.cancelRide(rideId, 'Admin cancellation', 'admin'); showToast('Ride cancelled!', 'success'); loadRecentRides(); } catch (error) { showToast('Error cancelling ride: ' + error.message, 'error'); } }