<?php
// بدء المخزن المؤقت وتنظيف أي مخرجات سابقة
ob_start();

// إخفاء الأخطاء في الإنتاج
ini_set('display_errors', 0);
error_reporting(0);

// تضمين الملفات المطلوبة
require_once '../includes/User.php';
require_once '../includes/db_config.php';

// تنظيف المخزن المؤقت وتعيين نوع الاستجابة
ob_clean();
header('Content-Type: application/json; charset=utf-8');

// التحقق من تسجيل دخول المستخدم
if (!User::isLoggedIn()) {
    echo json_encode([
        'success' => false, 
        'message' => 'User not logged in'
    ], JSON_UNESCAPED_UNICODE);
    exit();
}

// التحقق من نوع الطلب
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    echo json_encode([
        'success' => false, 
        'message' => 'Invalid request method'
    ], JSON_UNESCAPED_UNICODE);
    exit();
}

// قراءة البيانات المرسلة
$input = json_decode(file_get_contents('php://input'), true);

// التحقق من وجود جميع البارامترات المطلوبة
if (!$input || !isset($input['order_id']) || !isset($input['latitude']) || !isset($input['longitude'])) {
    echo json_encode([
        'success' => false, 
        'message' => 'Missing required parameters: order_id, latitude, longitude'
    ], JSON_UNESCAPED_UNICODE);
    exit();
}

// تنظيف وتحويل البيانات
$order_id = intval($input['order_id']);
$latitude = floatval($input['latitude']);
$longitude = floatval($input['longitude']);
$address = isset($input['address']) ? trim($input['address']) : '';

// الحصول على بيانات المستخدم الحالي
$current_user = User::getCurrentUser();

if (!$current_user) {
    echo json_encode([
        'success' => false, 
        'message' => 'User data not found'
    ], JSON_UNESCAPED_UNICODE);
    exit();
}

try {
    $db = getDBConnection();
    
    // التحقق من أن الطلب موجود ويخص المستخدم الحالي وفي حالة 'processing' أو 'ready'
    $stmt = $db->prepare("
        SELECT id, status, customer_name, customer_phone 
        FROM orders 
        WHERE id = ? AND user_id = ? AND status IN ('processing', 'ready')
    ");
    $stmt->execute([$order_id, $current_user['id']]);
    $order = $stmt->fetch(PDO::FETCH_ASSOC);
    
    if (!$order) {
        echo json_encode([
            'success' => false, 
            'message' => 'Order not found or not available for location update'
        ], JSON_UNESCAPED_UNICODE);
        exit();
    }
    
    // إنشاء بيانات الموقع بصيغة JSON
    $location_data = [
        'latitude' => $latitude,
        'longitude' => $longitude,
        'address' => $address,
        'updated_at' => date('Y-m-d H:i:s')
    ];
    
    // تحديث موقع العميل في جدول orders
    // العمود customer_location من نوع JSON في قاعدة البيانات
    $update_stmt = $db->prepare("
        UPDATE orders 
        SET customer_location = ?, 
            updated_at = CURRENT_TIMESTAMP 
        WHERE id = ?
    ");
    
    $result = $update_stmt->execute([json_encode($location_data, JSON_UNESCAPED_UNICODE), $order_id]);
    
    if ($result) {
        echo json_encode([
            'success' => true, 
            'message' => 'Location updated successfully',
            'data' => [
                'order_id' => $order_id,
                'latitude' => $latitude,
                'longitude' => $longitude
            ]
        ], JSON_UNESCAPED_UNICODE);
    } else {
        echo json_encode([
            'success' => false, 
            'message' => 'Failed to update location in database'
        ], JSON_UNESCAPED_UNICODE);
    }
    
} catch (PDOException $e) {
    // معالجة أخطاء قاعدة البيانات
    error_log("Update Location Error: " . $e->getMessage());
    echo json_encode([
        'success' => false, 
        'message' => 'Database error occurred'
    ], JSON_UNESCAPED_UNICODE);
} catch (Exception $e) {
    // معالجة الأخطاء العامة
    error_log("Update Location Error: " . $e->getMessage());
    echo json_encode([
        'success' => false, 
        'message' => 'An error occurred while updating location'
    ], JSON_UNESCAPED_UNICODE);
}
?>
