<?php
// نقوم بتضمين ملف الاتصال المعدل الذي يحتوي على $con (الرئيسي) و $con_ride (الرحلات)
require_once __DIR__ . '/../../get_connect.php';

// استلام البيانات (يمكن استلام ID الرحلة أو ID الراكب)
$passengerID = filterRequest("passengerID");
$rideID      = filterRequest("id"); // إضافة استقبال متغير رقم الرحلة

try {
    // =================================================================
    // 1. الخطوة الأولى: تحديد استراتيجية البحث (بواسطة رقم الرحلة أو الراكب)
    // =================================================================

    $sqlRide = "SELECT 
        id, 
        start_location, 
        end_location, 
        date, 
        driver_id, 
        passenger_id,
        price, 
        status, 
        created_at, 
        DriverIsGoingToPassenger, 
        rideTimeStart, 
        rideTimeFinish, 
        price_for_driver, 
        distance
    FROM ride ";

    // المنطق الجديد:
    // إذا تم إرسال rideID، نبحث عن الرحلة المحددة بدقة (تجنباً لأي تضارب)
    // إذا لم يتم إرساله، نبحث عن أحدث رحلة للراكب (للتتبع المباشر)
    if (!empty($rideID)) {
        $sqlRide .= "WHERE id = :rideID";
    } else {
        $sqlRide .= "WHERE passenger_id = :passengerID ORDER BY id DESC LIMIT 1";
    }

    // نستخدم المتغير $con_ride (سيرفر الرحلات)
    $stmtRide = $con_ride->prepare($sqlRide);

    // ربط المتغيرات حسب نوع البحث
    if (!empty($rideID)) {
        $stmtRide->bindParam(':rideID', $rideID);
    } else {
        $stmtRide->bindParam(':passengerID', $passengerID);
    }

    $stmtRide->execute();

    $rideData = $stmtRide->fetch(PDO::FETCH_ASSOC);

    // إذا لم يتم العثور على رحلة في سيرفر الرحلات، نوقف العملية
    if (!$rideData) {
        echo json_encode(["status" => "failure", "message" => "No ride found"]);
        exit;
    }

    // =================================================================
    // 2. الخطوة الثانية: جلب البيانات الثابتة (سائق، سيارة، تقييم) من السيرفر الرئيسي ($con)
    // نستخدم المعرفات التي حصلنا عليها من نتيجة الاستعلام الأول
    // =================================================================

    $driverID = $rideData['driver_id'];
    $pID = $rideData['passenger_id']; // نأخذ معرف الراكب من الرحلة نفسها لضمان التطابق

    // ملاحظة: استخدام :driverID_Sub في الاستعلام الفرعي لتجنب أخطاء PDO
    $sqlDetails = "SELECT 
        passengers.first_name AS passengerName, 
        passengers.last_name,

        CarRegistration.make, 
        CarRegistration.model, 
        CarRegistration.car_plate, 
        CarRegistration.year, 
        CarRegistration.color, 
        CarRegistration.color_hex,

        driver.first_name AS driverName, 
        driver.gender, 
        driver.phone,

        (
            SELECT ROUND(AVG(ratingDriver.rating), 2) 
            FROM ratingDriver 
            WHERE ratingDriver.driver_id = :driverID_Sub
        ) AS ratingDriver,

        driverToken.token AS token

    FROM driver 
    LEFT JOIN passengers ON passengers.id = :passengerID
    LEFT JOIN CarRegistration ON CarRegistration.driverID = driver.id
    LEFT JOIN driverToken ON driverToken.captain_id = driver.id
    WHERE driver.id = :driverID";

    // نستخدم المتغير الأصلي $con للسيرفر الرئيسي
    $stmtDetails = $con->prepare($sqlDetails);
    
    // نربط المتغيرات
    $stmtDetails->bindParam(':driverID', $driverID);
    $stmtDetails->bindParam(':driverID_Sub', $driverID);
    $stmtDetails->bindParam(':passengerID', $pID);
    
    $stmtDetails->execute();

    $detailsData = $stmtDetails->fetch(PDO::FETCH_ASSOC);

    // =================================================================
    // 3. الخطوة الثالثة: دمج البيانات وتجهيز الرد
    // =================================================================

    $finalData = [];

    if ($detailsData) {
        // دمج مصفوفة الرحلة (من سيرفر الرحلات) مع مصفوفة التفاصيل (من الرئيسي)
        $finalData = array_merge($rideData, $detailsData);
    } else {
        // في حال كانت الرحلة بدون سائق بعد، نكتفي ببيانات الرحلة
        $finalData = $rideData;
    }

    // =================================================================
    // 4. فك التشفير (Decrypt)
    // =================================================================

    if ($finalData) {
        $fieldsToDecrypt = ['driverName', 'gender', 'phone', 'car_plate', 'passengerName', 'last_name', 'token'];
        
        foreach ($fieldsToDecrypt as $field) {
            if (!empty($finalData[$field])) {
                $finalData[$field] = $encryptionHelper->decryptData($finalData[$field]);
            }
        }
    }

    echo json_encode([
        "status" => "success",
        "data" => $finalData
    ]);

} catch (Exception $e) {
    error_log("API Error: " . $e->getMessage());
    http_response_code(500);
    echo json_encode(["status" => "failure", "message" => "Server Error: " . $e->getMessage()]);
}
?>