'failure', 'message' => 'Missing required parameters']); exit; } try { // نافذة زمنية مناسبة (3 دقائق) $freshSeconds = 180; $sql = " SELECT cl.driver_id, cl.latitude, cl.longitude, cl.heading, cl.speed, cl.status, cl.created_at, cl.updated_at, d.phone, d.email, d.birthdate, d.first_name, d.last_name, d.gender, d.maritalStatus, cr.make, cr.car_plate, cr.model, cr.color, cr.vin, cr.color_hex, cr.year, dt.token, COALESCE(rd.ratingDriver, 0) AS ratingDriver, COALESCE(rd.ratingCount, 0) AS ratingCount FROM car_locations cl LEFT JOIN driver d ON d.id = cl.driver_id LEFT JOIN CarRegistration cr ON cr.driverID = cl.driver_id LEFT JOIN driverToken dt ON dt.captain_id = cl.driver_id LEFT JOIN ( SELECT driver_id, AVG(rating) AS ratingDriver, COUNT(id) AS ratingCount FROM ratingDriver GROUP BY driver_id ) rd ON rd.driver_id = cl.driver_id WHERE cl.latitude BETWEEN :southwestLat AND :northeastLat AND cl.longitude BETWEEN :southwestLon AND :northeastLon AND cl.status = 'off' AND cl.updated_at >= NOW() - INTERVAL :freshSeconds SECOND AND COALESCE(cr.year, 0) > 2000 AND (cr.make NOT LIKE '%دراج%' AND cr.model NOT LIKE '%دراج%') ORDER BY ratingDriver DESC, ratingCount DESC, cl.updated_at DESC LIMIT 10; "; $stmt = $con->prepare($sql); $stmt->bindParam(':southwestLat', $southwestLat); $stmt->bindParam(':southwestLon', $southwestLon); $stmt->bindParam(':northeastLat', $northeastLat); $stmt->bindParam(':northeastLon', $northeastLon); $stmt->bindValue(':freshSeconds', $freshSeconds, PDO::PARAM_INT); $stmt->execute(); $car_locations = $stmt->fetchAll(PDO::FETCH_ASSOC); if ($car_locations) { $fieldsToDecrypt = [ 'phone','email','gender','birthdate', 'first_name','last_name','token', 'make','car_plate','vin','maritalStatus' ]; foreach ($car_locations as &$row) { foreach ($fieldsToDecrypt as $field) { if (isset($row[$field]) && $row[$field] !== null && $row[$field] !== '') { try { $row[$field] = $encryptionHelper->decryptData($row[$field]); } catch (Exception $e) { $row[$field] = null; } } } // ✅ احسب العمر if (!empty($row['birthdate'])) { try { $birthdate = new DateTime($row['birthdate']); $now = new DateTime(); $row['age'] = $now->diff($birthdate)->y; } catch (Exception $e) { $row['age'] = null; } } else { $row['age'] = null; } } unset($row); printSuccess($car_locations); } else { printFailure("No car locations found"); } } catch (PDOException $e) { printFailure("Database error: " . $e->getMessage()); }