<?php
// start_ride.php
require_once __DIR__ . '/../../connect.php'; 

$ride_id   = filterRequest("id"); 
$driver_id = filterRequest("driver_id");
$status    = filterRequest("status"); // 'Begin'
$passengerToken = filterRequest("passengerToken");

if (!$ride_id || !$driver_id || !$status) {
    jsonError("Missing parameters");
    exit;
}

try {
    // 1. تحديث سيرفر الرحلات (Remote DB - con_ride)
    $stmtRemote = $con_ride->prepare("UPDATE ride SET status = ?, rideTimeStart = NOW() WHERE id = ?");
    $stmtRemote->execute([$status, $ride_id]);
    
    if ($stmtRemote->rowCount() == 0) {
        // ملاحظة: أحياناً التحديث لا يؤثر بصفوف إذا كانت البيانات نفسها، 
        // لكن هنا نفترض الفشل إذا لم يجد الرحلة.
        // يمكنك إكمال التنفيذ إذا كنت متأكداً أن الرحلة موجودة.
    }

    // 2. تحديث السيرفر المحلي (Local DB) والمعاملات
    $con->beginTransaction();
    
    // تحديث الرحلة محلياً
    $stmtMainRide = $con->prepare("UPDATE ride SET status = ?, rideTimeStart = NOW() WHERE id = ?");
    $stmtMainRide->execute([$status, $ride_id]);

    // تحديث أو إدخال في جدول Driver Orders
    $checkSql = "SELECT `order_id` FROM `driver_orders` WHERE `order_id` = ?";
    $checkStmt = $con->prepare($checkSql);
    $checkStmt->execute([$ride_id]);

    if ($checkStmt->rowCount() > 0) {
        $updateSql = "UPDATE `driver_orders` SET `driver_id` = ?, `status` = ?, `created_at` = NOW() WHERE `order_id` = ?";
        $con->prepare($updateSql)->execute([$driver_id, $status, $ride_id]);
    } else {
        $insertSql = "INSERT INTO `driver_orders` (`driver_id`, `order_id`, `created_at`, `status`) VALUES (?, ?, NOW(), ?)";
        $con->prepare($insertSql)->execute([$driver_id, $ride_id, $status]);
    }

    // =================================================================
    // 🔥 الخطوة 3: إشعار الراكب (Socket + FCM)
    // =================================================================
    
    // جلب بيانات الراكب من قاعدة البيانات لضمان الدقة
    $stmtPas = $con_ride->prepare("SELECT passenger_id FROM ride WHERE id = ?");
    $stmtPas->execute([$ride_id]);
    $passenger_id = $stmtPas->fetchColumn();

    if ($passenger_id) {
        
        // أ) إرسال السوكيت (Socket)
        // تم إلغاء التعليق عنه ليكون السيرفر هو المسؤول
        $socketPayload = [
            'ride_id'   => $ride_id,
            'status'    => 'started', // أو 'Begin' حسب ما يتوقعه التطبيق
            'msg'       => 'بدأت الرحلة، نتمنى لك سلامة الوصول 🚀'
        ];
        
        if (function_exists('notifyPassengerOnRideServer')) {
            notifyPassengerOnRideServer($passenger_id, $socketPayload);
        }

        // ب) إرسال FCM (Internal)
        if (!empty($passengerToken)) {
            $fcmData = [
                'ride_id'  => (string)$ride_id
            ];
            
            // 🔥 استخدام sendFCM_Internal
            sendFCM_Internal(
                $passengerToken,                  // الهدف
                "بدأت الرحلة 🏁",                 // العنوان
                "نتمنى لك رحلة آمنة ومريحة.",     // النص
                $fcmData,                         // البيانات
                "Trip is Begin",                  // التصنيف (حافظنا عليه كما هو في التطبيق)
                false                             // ليس Topic
            );
        }
    }

    $con->commit();
    jsonSuccess(null, "Ride started successfully");

} catch (PDOException $e) {
    if ($con->inTransaction()) {
        $con->rollBack();
    }
    jsonError("Exception: " . $e->getMessage());
}
?>