<?php
session_start();
require_once 'config.php';

// التحقق من تسجيل الدخول
if (!isset($_SESSION['user_id'])) {
    http_response_code(401);
    echo json_encode(['status' => 'error', 'message' => 'غير مسموح']);
    exit;
}

$device_id = $_GET['device_id'] ?? '';
// خيارات الفلترة بالتاريخ
$date = $_GET['date'] ?? null; // بصيغة YYYY-MM-DD
$from_date = $_GET['from_date'] ?? null; // يمكن أن تكون بصيغة YYYY-MM-DD أو وقت كامل
$to_date = $_GET['to_date'] ?? null;

if (empty($device_id)) {
    echo json_encode(['status' => 'error', 'message' => 'معرف الجهاز مطلوب']);
    exit;
}

try {
    // جلب سجلات التوقف للجهاز (5 دقائق فأكثر) مع دعم فلترة التاريخ
    $timeFilter = "AND timestamp >= DATE_SUB(NOW(), INTERVAL 30 DAY)";
    $params = [$device_id];

    if (!empty($date)) {
        // فلترة حسب يوم محدد
        $timeFilter = "AND DATE(timestamp) = ?";
        $params[] = $date;
    } elseif (!empty($from_date) && !empty($to_date)) {
        // فلترة حسب نطاق تاريخ/وقت
        $from = preg_match('/^\d{4}-\d{2}-\d{2}$/', $from_date) ? ($from_date . ' 00:00:00') : $from_date;
        $to = preg_match('/^\d{4}-\d{2}-\d{2}$/', $to_date) ? ($to_date . ' 23:59:59') : $to_date;
        $timeFilter = "AND timestamp BETWEEN ? AND ?";
        $params[] = $from;
        $params[] = $to;
    }

    $sql = "
        SELECT 
            MIN(timestamp) as entry_time,
            MAX(timestamp) as exit_time,
            AVG(latitude) as lat,
            AVG(longitude) as lng,
            COUNT(*) as point_count,
            MIN(battery) as min_battery,
            MAX(battery) as max_battery
        FROM locations 
        WHERE device_id = ? 
        $timeFilter
        GROUP BY 
            ROUND(latitude, 4),
            ROUND(longitude, 4),
            DATE(timestamp),
            HOUR(timestamp)
        HAVING 
            TIMESTAMPDIFF(MINUTE, MIN(timestamp), MAX(timestamp)) >= 5
        ORDER BY entry_time DESC
        LIMIT 50
    ";

    $stmt = $conn->prepare($sql);
    $stmt->execute($params);
    $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    $stops = [];
    $processed_stops = [];
    
    foreach ($results as $row) {
        $duration = (strtotime($row['exit_time']) - strtotime($row['entry_time'])) / 60; // بالدقائق
        
        if ($duration >= 5) { // فقط التوقفات 5 دقائق فأكثر
            $entry_timestamp = strtotime($row['entry_time']);
            $exit_timestamp = strtotime($row['exit_time']);
            
            // التحقق من التداخل مع التوقفات الموجودة
            $is_duplicate = false;
            foreach ($processed_stops as $existing_stop) {
                $existing_entry = strtotime($existing_stop['entry_time']);
                $existing_exit = strtotime($existing_stop['exit_time']);
                
                // التحقق من التداخل الزمني والموقع المتشابه
                $time_overlap = !($exit_timestamp <= $existing_entry || $entry_timestamp >= $existing_exit);
                $location_similar = (abs($row['lat'] - $existing_stop['lat']) < 0.001 && 
                                   abs($row['lng'] - $existing_stop['lng']) < 0.001);
                
                if ($time_overlap && $location_similar) {
                    $is_duplicate = true;
                    break;
                }
            }
            
            if (!$is_duplicate) {
                $stop_data = [
                    'entry_time' => $row['entry_time'],
                    'exit_time' => $row['exit_time'],
                    'duration' => round($duration),
                    'lat' => $row['lat'],
                    'lng' => $row['lng'],
                    'point_count' => $row['point_count'],
                    'battery_range' => ($row['min_battery'] && $row['max_battery']) 
                        ? ($row['min_battery'] == $row['max_battery'] 
                            ? $row['min_battery'] . '%' 
                            : $row['min_battery'] . '% - ' . $row['max_battery'] . '%')
                        : 'غير معروفة'
                ];
                
                $stops[] = $stop_data;
                $processed_stops[] = $stop_data;
            }
        }
    }
    
    // ترتيب النتائج حسب وقت الدخول (الأحدث أولاً) وتحديد العدد إلى 20
     usort($stops, function($a, $b) {
         return strtotime($b['entry_time']) - strtotime($a['entry_time']);
     });
     
     $stops = array_slice($stops, 0, 20);
    
    echo json_encode([
        'status' => 'success',
        'stops' => $stops,
        'count' => count($stops)
    ]);
    
} catch (Exception $e) {
    error_log("خطأ في جلب سجلات التوقف: " . $e->getMessage());
    echo json_encode([
        'status' => 'error', 
        'message' => 'خطأ في جلب البيانات'
    ]);
}
?>