<?php

include_once "common.php";
include_once "encriptar.php";

date_default_timezone_set('America/Mexico_City');

// Configuración global de archivos (sin constantes fijas)
$TOKEN_FILE_PREFIX = "tokens/token_";  // Crear directorio 'tokens'
$DATA_FILE_PREFIX = "data/data_";     // Crear directorio 'data'

// Conexión a la base de datos
$db_server = '162.240.165.127';
$db_name = 'blocator_monitoreo';            
$db_user = 'blocator_rastreo';
$db_password = 'V,D@12Y3v9s[';

$conn_site = mysqli_connect($db_server, $db_user, $db_password, $db_name);
$conn_site->set_charset("utf8");

// Función modificada para obtener token con parámetros dinámicos
function getNewToken($config, $conn_site) {
    $data = [
        "grant_type" => "password",
        "client_id" => $config['client_id_token'],
        "client_secret" => $config['client_secret_token'],
        "scope" => $config['scope_token'],
        "username" => $config['username_token'],
        "password" => $config['password_token']
    ];

    $ch = curl_init();
    curl_setopt_array($ch, [
        CURLOPT_URL => $config['token_url'],
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POST => true,
        CURLOPT_HTTPHEADER => ["Content-Type: application/x-www-form-urlencoded"],
        CURLOPT_POSTFIELDS => http_build_query($data)
    ]);

    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    if ($httpCode === 200) {
        $tokenData = json_decode($response, true);
        if (isset($tokenData['access_token'])) {
            $tokenData['expires_at'] = time() + $tokenData['expires_in'];
            $tokenFile = $GLOBALS['TOKEN_FILE_PREFIX'] . $config['idgpse'] . ".json";
            file_put_contents($tokenFile, json_encode($tokenData));
            return $tokenData['access_token'];
        }
    }

    error_log("Error obteniendo token para ID: {$config['idgpse']}. Código: $httpCode");
    return null;
}

// Función para obtener token con manejo individual por configuración
function getToken($config, $conn_site) {
    $tokenFile = $GLOBALS['TOKEN_FILE_PREFIX'] . $config['idgpse'] . ".json";
    
    if (file_exists($tokenFile)) {
        $tokenData = json_decode(file_get_contents($tokenFile), true);
        if ($tokenData && isset($tokenData['access_token'], $tokenData['expires_at'])) {
            if (time() < $tokenData['expires_at']) {
                return $tokenData['access_token'];
            }
        }
    }
    return getNewToken($config, $conn_site);
}

// Función principal modificada para ser dinámica
function fetchAndSaveData($config, $conn_site) {
    $token = getToken($config, $conn_site);
    if (!$token) return false;

    $url = $config['data_url'] . "?groupId=" . $config['group_id'] . "&timezone=" . $config['timezone'];

    $ch = curl_init();
    curl_setopt_array($ch, [
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => ["Authorization: Bearer $token", "Content-Type: application/json"],
        CURLOPT_CUSTOMREQUEST => "GET"
    ]);

    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    if ($httpCode === 200) {
		$data_File = $GLOBALS['DATA_FILE_PREFIX'] . $config['idgpse'] . ".json";
		
		$idgpsedb = $config['idgpse'];
		
		//file_put_contents($data_File, $response);
		
        // Insertar en la base de datos
        $response_db = $conn_site->real_escape_string($response);
        
        // Procesar los datos como antes...
		
		$sql2="INSERT INTO Recibir_Datos_GPS (datos) VALUES ('$response_db')";																	
		$result2=mysqli_query($conn_site,$sql2);


		$fecha= date ('Y-m-d');
		$hora=date("H:i:s"); 
	

		
		$data = json_decode($response, true);
		
		
		// Obtener los vehículos
		$vehicles = $data['items'];
		
        $n=0;
		foreach ($vehicles as $vehicle) {
			$n++;	
			echo $n.'<br>';
			echo "<h2>Vehículo ID: {$vehicle['id']}</h2>";
			echo "<ul>";
			echo "<li>Nombre: {$vehicle['name']}</li>";
			echo "<li>Fecha: {$vehicle['date']}</li>";
			echo "<li>Económico: {$vehicle['economico']}</li>";
			echo "<li>Latitud: {$vehicle['latitude']}</li>";
			echo "<li>Longitud: {$vehicle['longitude']}</li>";
			echo "<li>Velocidad: {$vehicle['speed']} km/h</li>";
			echo "<li>Orientación: {$vehicle['orientation']}</li>";
			echo "<li>Odómetro: {$vehicle['odometer']} km</li>";
			echo "<li>Placas: {$vehicle['plates']}</li>";
			echo "<li>Encendido: " . ($vehicle['ignition'] ? "Sí" : "No") . "</li>";
			
			echo "<li>Pánico: " . ($vehicle['panic'] ? "Sí" : "No") . "</li>";
			echo "<li>Satélites: {$vehicle['satellite']}</li>";
			echo "<li>Fecha GPS: {$vehicle['gpsDate']}</li>";
			echo "<li>VIN: {$vehicle['VIN']}</li>";
			echo "</ul>";
			echo "<hr>";
			
			
			$id_vehiculo = $vehicle['id'];
			$name = $vehicle['name'];
			$date = $vehicle['date'];
			$economico = $vehicle['economico'];
			$latitude = $vehicle['latitude'];
			$longitude = $vehicle['longitude'];
			$speed = $vehicle['speed'];
			$orientation = $vehicle['orientation'];
			$odometer = $vehicle['odometer'];
			
			$ignition = $vehicle['ignition'] ? 1 : 0; // Convertir true/false a 1/0
			$panic = $vehicle['panic'] ? 1 : 0;
			$plates = $vehicle['plates'];
			$satellite = $vehicle['satellite'];
			$gpsDate = $vehicle['gpsDate'];
			$vin =  $vehicle['VIN'];
			
			$ids="0"; $ido = ""; $idunidad="";	$operador= ""; $celular_operador= "";
			
			$sql3="SELECT ID,placas FROM Unidades where serie = '$vin'  ";
			$result3=mysqli_query($conn_site,$sql3);
			$encontre=mysqli_num_rows($result3);
			if($encontre > 0 ){
				$registro3=mysqli_fetch_array($result3);
				$idunidad= "".$registro3['ID'].""; 
				$plates= "".$registro3['placas'].""; 
			}	
				
			if(!empty($idunidad)){	
				$sql2="SELECT ID,ido FROM Servicios where idunidad = $idunidad and status = 5 ";
				$result2=mysqli_query($conn_site,$sql2);
				$encontre=mysqli_num_rows($result2);
				if($encontre > 0 ){
					$registro2=mysqli_fetch_array($result2);
					$ids= "".$registro2['ID']."";
					$ido= "".$registro2['ido']."";					
				}
			}
			
			
			
			
			
			
			$sqld="SELECT ids FROM Datos_GPS where vin = '$vin' and status in (0,1) Order by ID Limit 0,1 ";
			$resultd=mysqli_query($conn_site,$sqld);
			$encontre=mysqli_num_rows($resultd);
			if($encontre > 0 ){
				$registrod=mysqli_fetch_array($resultd);
				$ids= "".$registrod['ids'].""; 
			}
			
			
			
			if(!empty($ido)){	
				$sql2="SELECT nombre,telefono FROM Operadores where ID= $ido  ";
				$result2=mysqli_query($conn_site,$sql2);
				$encontre=mysqli_num_rows($result2);
				if($encontre > 0 ){
					$registro2=mysqli_fetch_array($result2);
					$operador= "".$registro2['nombre']."";
					$celular_operador= "".$registro2['telefono']."";					
				}
			}
			
			$sql2="INSERT INTO Datos_GPS  (ids,idgps,id_vehiculo,operador,celular_operador,date,name,economico,latitude,longitude,speed,orientation,odometer,plates,ignition,panic,satellite,gpsDate,vin,fecha,hora,status) VALUES 
			('$ids','$idgpsedb','$id_vehiculo','$operador','$celular_operador','$date','$name','$economico','$latitude','$longitude','$speed','$orientation','$odometer','$plates','$ignition','$panic','$satellite','$gpsDate','$vin','$fecha','$hora','0')";																	
			$result2=mysqli_query($conn_site,$sql2);
			
			$sql2="INSERT INTO Datos_GPS_Cliente  (ids,idgps,id_vehiculo,operador,celular_operador,date,name,economico,latitude,longitude,speed,orientation,odometer,plates,ignition,panic,satellite,gpsDate,vin,fecha,hora,status) VALUES 
			('$ids','$idgpsedb','$id_vehiculo','$operador','$celular_operador','$date','$name','$economico','$latitude','$longitude','$speed','$orientation','$odometer','$plates','$ignition','$panic','$satellite','$gpsDate','$vin','$fecha','$hora','0')";																	
			$result2=mysqli_query($conn_site,$sql2);
			
			
			$sqld="SELECT ID FROM Unidades_GPS_Cliente where idgps = '$idgpsedb' and id_vehiculo = '$id_vehiculo'  ";
			$resultd=mysqli_query($conn_site,$sqld);
			$encontre=mysqli_num_rows($resultd);
			if($encontre == 0 ){
				
				$sql2="INSERT INTO Unidades_GPS_Cliente  (idgps,id_vehiculo,name,economico,plates,vin,autorizado) VALUES 
					('$idgpsedb','$id_vehiculo','$name','$economico','$plates','$vin','0')";																	
				$result2=mysqli_query($conn_site,$sql2);
				
			}
			
			
		}
		
		
		echo json_encode(["status" => "success", "message" => "Datos actualizados"]);
		
		
        // (Mantener tu lógica de procesamiento de vehículos aquí)
        
        return true;
    } elseif ($httpCode === 401) {
		
		
        getNewToken($config, $conn_site);
        return fetchAndSaveData($config, $conn_site);
    }

    error_log("Error en solicitud para ID: {$config['idgpse']}. Código: $httpCode");
    return false;
}









// Obtener todas las configuraciones activas tipo = 1
$sql = "SELECT * FROM GPS WHERE status = 1 and tipo = 1 ORDER BY ID";
$result = mysqli_query($conn_site, $sql);

while ($config = mysqli_fetch_assoc($result)) {
    try {
        echo "<h3>Procesando configuración ID: {$config['ID']}</h3>";
        
        // Crear estructura de configuración
        $apiConfig = [
            'idgpse' => $config['ID'],
            'token_url' => $config['token_url'],
            'username_token' => $config['username_token'],
            'password_token' => $config['password_token'],
            'client_id_token' => $config['client_id_token'],
            'client_secret_token' => $config['client_secret_token'],
            'scope_token' => $config['scope_token'],
            'data_url' => $config['data_url'],
            'group_id' => $config['group_id'],
            'timezone' => $config['timezone']
        ];

        // Ejecutar el proceso para cada configuración
        if (fetchAndSaveData($apiConfig, $conn_site)) {
            echo "<p style='color:green'>Configuración ID: {$config['ID']} procesada exitosamente</p>";
        } else {
            echo "<p style='color:red'>Error procesando configuración ID: {$config['ID']}</p>";
        }
        
    } catch (Exception $e) {
        error_log("Error crítico en ID: {$config['ID']} - " . $e->getMessage());
        continue; // Continuar con la siguiente configuración
    }
}






// Cerrar conexión
mysqli_close($conn_site);

echo "<h2>Proceso completo</h2>";

?>