<?php
date_default_timezone_set('America/La_Paz'); // Configura la zona horaria a GMT-4
// Conexión a la base de datos
require 'db_connection.php';

// Crear conexión
$conn = new mysqli($servername, $username, $password, $dbname, $port);
if ($conn->connect_error) {
    die("Error en la conexión: " . $conn->connect_error);
}

// Consulta para obtener los datos más recientes
$sql = "
SELECT
    n.EVTLGUID AS registro_id,
    FROM_UNIXTIME(n.DEVDT) AS fecha_hora_evento,
    n.DEVUID AS dispositivo_rfid,
    u.NM AS nombre_usuario,
    e.NM AS descripcion_evento,
    n.DEVDT AS timestamp_evento,
    n.usrid as usuario
FROM t_lg202411 n
LEFT JOIN t_usr u ON n.usrid = u.usrid
LEFT JOIN t_evttyp e ON n.EVT = e.EVT
WHERE n.EVT = 4102
    AND n.DEVDT >= UNIX_TIMESTAMP(CURDATE())
    AND n.DEVDT IN (
      SELECT MIN(n1.DEVDT)
      FROM t_lg202411 n1
      WHERE n1.usrid = n.usrid
        AND n1.DEVUID = n.DEVUID
        AND n1.DEVDT BETWEEN n.DEVDT - 60 AND n.DEVDT
  )
ORDER BY n.usrid, n.DEVDT;
";

// Ejecutar la consulta
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    $events = [];
    $current_user = null;
    $is_ingreso = true;  // Indicador de tipo de movimiento (Ingreso o Salida)

    // Recorrer los resultados y aplicar la alternancia entre "Ingreso" y "Salida"
    while ($row = $result->fetch_assoc()) {
        $registro_id = $row['registro_id'];
        $fecha_hora_evento = $row['fecha_hora_evento'];
        $dispositivo_rfid = $row['dispositivo_rfid'];
        $nombre_usuario = $row['nombre_usuario'];
        $descripcion_evento = $row['descripcion_evento'];
        $usrid = $row['usuario'];

        // Si cambiamos de usuario, reiniciamos la alternancia (Ingreso)
        if ($current_user !== $usrid) {
            $is_ingreso = true; // El primer registro de cada usuario es "Ingreso"
            $current_user = $usrid;
        }

        // Determinar el tipo de movimiento
        $tipo_movimiento = $is_ingreso ? 'Ingreso' : 'Salida';
        $is_ingreso = !$is_ingreso; // Alternar entre Ingreso y Salida

        // Guardar el evento
        $events[$usrid][] = [
            'registro_id' => $registro_id,
            'fecha_hora_evento' => $fecha_hora_evento,
            'dispositivo_rfid' => $dispositivo_rfid,
            'nombre_usuario' => $nombre_usuario,
            'descripcion_evento' => $descripcion_evento,
            'tipo_movimiento' => $tipo_movimiento,
            'usrid' => $usrid,
        ];
    }

    // Filtrar usuarios cuyo último registro sea "Ingreso"
    $filtered_events = [];
    foreach ($events as $usrid => $user_events) {
        $last_event = end($user_events); // Último evento del usuario
        if ($last_event['tipo_movimiento'] === 'Ingreso') {
            // Calcular la diferencia de tiempo con la hora actual
            $current_time = time(); // Hora actual en UNIX
            $event_time = strtotime($last_event['fecha_hora_evento']); // Hora del evento
            $time_difference = $current_time - $event_time; // Diferencia en segundos

            // Convertir la diferencia a un formato legible (horas y minutos)
            $hours = floor($time_difference / 3600);
            $minutes = floor(($time_difference % 3600) / 60);
            $last_event['time_difference'] = "{$hours}h {$minutes}m"; // Ejemplo: "2h 30m"

            $filtered_events[] = $last_event; // Guardar el evento
        }
    }

    $sql2 = "SELECT dispositivo_rfid, latitud, longitud FROM dispositivos_ubicaciones";
    $result2 = $conn1->query($sql2);

    $ubicaciones = [];
    if ($result2 && $result2->num_rows > 0) {
        while ($row = $result2->fetch_assoc()) {
            $ubicaciones[$row['dispositivo_rfid']] = $row;
        }
    }

    // Combinar los datos de ambas bases de datos
    $datos = [];
    foreach ($filtered_events as $evento) {
        $dispositivo = $evento['dispositivo_rfid'];
        $evento['latitud'] = isset($ubicaciones[$dispositivo]) ? $ubicaciones[$dispositivo]['latitud'] : null;
        $evento['longitud'] = isset($ubicaciones[$dispositivo]) ? $ubicaciones[$dispositivo]['longitud'] : null;

        $datos[] = $evento;
    }

    if (!empty($datos)) {
        // Convertir los eventos filtrados a formato JSON
        echo json_encode($datos);
    } else {
        echo json_encode([]);
    }
}

$conn->close();
