getMessage()); } $rideId = filterRequest("ride_id"); $driverId = filterRequest("driver_id"); $passengerToken = filterRequest("passengerToken"); if (!$rideId || !$driverId) { jsonError("Missing required parameters."); exit; } try { // 1. تحديث الحالة في السيرفر البعيد (Remote DB - con_ride) $stmtRemote = $con_ride->prepare("UPDATE ride SET status = 'arrived', updated_at = NOW() WHERE id = ? AND driver_id = ? AND status = 'Apply'"); $stmtRemote->execute([$rideId, $driverId]); // 2. تحديث الحالة في السيرفر المحلي (Local DB - con) if (isset($con)) { $stmtLocal = $con->prepare("UPDATE ride SET status = 'arrived', updated_at = NOW() WHERE id = ? AND driver_id = ? AND status = 'Apply'"); $stmtLocal->execute([$rideId, $driverId]); } // 3. جلب بيانات الراكب للإرسال // نستخدم con_ride لضمان الدقة $stmtPas = $con_ride->prepare("SELECT passenger_id FROM ride WHERE id = ?"); $stmtPas->execute([$rideId]); $passenger_id = $stmtPas->fetchColumn(); if ($passenger_id) { // أ) إرسال Socket (الأسرع) $payload = [ 'status' => 'arrived', 'ride_id' => $rideId, 'msg' => 'السائق وصل إلى موقعك 🚖' ]; if (function_exists('notifyPassengerOnRideServer')) { notifyPassengerOnRideServer($passenger_id, $payload); } // ب) إرسال FCM (باستخدام الدالة الجديدة) if (!empty($passengerToken)) { $fcmData = [ 'category' => 'Arrive Ride', // نفس الاسم القديم لضمان عمل التطبيق 'ride_id' => (string)$rideId ]; // 🔥 استخدام sendFCM_Internal كرسالة صامتة sendFCM_Internal( $passengerToken, // الهدف "", // تفريغ العنوان "", // تفريغ النص $fcmData, // البيانات "Arrive Ride", // التصنيف false // ليس Topic ); } } jsonSuccess(null, "Arrival notified successfully"); } catch (Exception $e) { jsonError("Error: " . $e->getMessage()); } ?>