<?php
header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');

// Configurações do banco de dados
$configs = [
    ['host' => 'localhost', 'user' => 'pinheir3', 'password' => '080880Gelboy', 'database' => 'pinheir3_controle_frotasV1.1'],
    ['host' => 'localhost', 'user' => 'root', 'password' => '080880Gelboy', 'database' => 'pinheir3_controle_frotasV1.1'],
    ['host' => 'localhost', 'user' => 'pinheir3', 'password' => '', 'database' => 'pinheir3_controle_frotasV1.1'],
    ['host' => 'localhost', 'user' => 'root', 'password' => '', 'database' => 'controle_frotas']
];

$pdo = null;
$configUsada = null;

// Tentar conectar
foreach ($configs as $config) {
    try {
        $pdo = new PDO(
            "mysql:host={$config['host']};dbname={$config['database']};charset=utf8mb4",
            $config['user'],
            $config['password'],
            [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
        );
        $configUsada = $config;
        break;
    } catch (PDOException $e) {
        continue;
    }
}

if (!$pdo) {
    echo json_encode(['erro' => 'Não foi possível conectar com o banco']);
    exit;
}

try {
    $debug = [];
    
    // 1. Query EXATA que a API usa para viagens ativas
    $debug['query_original'] = "
        SELECT 
            v.id,
            v.cliente,
            v.motivo,
            v.tecnico_id,
            v.veiculo_id,
            v.data_inicio,
            v.latitude_inicial,
            v.longitude_inicial,
            v.latitude_final,
            v.longitude_final,
            v.trajeto,
            v.km_inicial,
            TIMESTAMPDIFF(MINUTE, v.data_inicio, NOW()) as duracao_minutos
        FROM viagens v
        WHERE v.data_fim IS NULL
        ORDER BY v.data_inicio DESC
    ";
    
    $stmt = $pdo->query($debug['query_original']);
    $resultadoQuery = $stmt->fetchAll(PDO::FETCH_ASSOC);
    $debug['resultado_query_api'] = $resultadoQuery;
    
    // 2. Verificar especificamente a viagem ID 1
    $stmt = $pdo->prepare("
        SELECT 
            id,
            cliente,
            motivo,
            tecnico_id,
            veiculo_id,
            data_inicio,
            data_fim,
            latitude_inicial,
            longitude_inicial,
            latitude_final,
            longitude_final,
            km_inicial,
            km_final,
            trajeto,
            observacoes,
            sincronizado,
            created_at,
            updated_at,
            endereco_inicial,
            endereco_final,
            cliente_id,
            -- Verificações específicas
            data_fim IS NULL as data_fim_nula,
            latitude_inicial IS NULL as lat_inicial_nula,
            longitude_inicial IS NULL as lng_inicial_nula,
            latitude_inicial = 0 as lat_inicial_zero,
            longitude_inicial = 0 as lng_inicial_zero,
            latitude_inicial = '' as lat_inicial_vazio,
            longitude_inicial = '' as lng_inicial_vazio,
            CHAR_LENGTH(TRIM(latitude_inicial)) as lat_inicial_length,
            CHAR_LENGTH(TRIM(longitude_inicial)) as lng_inicial_length
        FROM viagens 
        WHERE id = 1
    ");
    $stmt->execute();
    $viagemId1 = $stmt->fetch(PDO::FETCH_ASSOC);
    $debug['viagem_id_1_detalhada'] = $viagemId1;
    
    // 3. Testar filtros da query principal um por um
    $stmt = $pdo->query("SELECT COUNT(*) as total FROM viagens");
    $debug['total_viagens'] = $stmt->fetch()['total'];
    
    $stmt = $pdo->query("SELECT COUNT(*) as total FROM viagens WHERE data_fim IS NULL");
    $debug['viagens_data_fim_null'] = $stmt->fetch()['total'];
    
    $stmt = $pdo->query("SELECT COUNT(*) as total FROM viagens WHERE data_fim IS NULL AND latitude_inicial IS NOT NULL");
    $debug['viagens_com_lat_inicial'] = $stmt->fetch()['total'];
    
    $stmt = $pdo->query("SELECT COUNT(*) as total FROM viagens WHERE data_fim IS NULL AND longitude_inicial IS NOT NULL");
    $debug['viagens_com_lng_inicial'] = $stmt->fetch()['total'];
    
    $stmt = $pdo->query("SELECT COUNT(*) as total FROM viagens WHERE data_fim IS NULL AND latitude_inicial IS NOT NULL AND longitude_inicial IS NOT NULL");
    $debug['viagens_com_coordenadas_completas'] = $stmt->fetch()['total'];
    
    // 4. Verificar se há problemas de encoding ou espaços
    $stmt = $pdo->query("
        SELECT 
            id,
            cliente,
            CONCAT('[', latitude_inicial, ']') as lat_com_delimitadores,
            CONCAT('[', longitude_inicial, ']') as lng_com_delimitadores,
            HEX(latitude_inicial) as lat_hex,
            HEX(longitude_inicial) as lng_hex,
            ASCII(latitude_inicial) as lat_ascii_primeiro_char,
            ASCII(longitude_inicial) as lng_ascii_primeiro_char
        FROM viagens 
        WHERE data_fim IS NULL
        LIMIT 5
    ");
    $debug['verificacao_encoding'] = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    // 5. Simular processamento da API step-by-step para viagem ID 1
    if ($viagemId1) {
        $debug['processamento_viagem_1'] = [];
        
        // Verificar trajeto JSON
        $trajeto = [];
        if ($viagemId1['trajeto']) {
            $trajetoDecoded = json_decode($viagemId1['trajeto'], true);
            $debug['processamento_viagem_1']['trajeto_raw'] = $viagemId1['trajeto'];
            $debug['processamento_viagem_1']['trajeto_decoded'] = $trajetoDecoded;
            $debug['processamento_viagem_1']['trajeto_is_array'] = is_array($trajetoDecoded);
            if (is_array($trajetoDecoded)) {
                $trajeto = $trajetoDecoded;
            }
        }
        
        // Determinar posição atual seguindo lógica da API
        $posicaoAtual = null;
        
        // 1. Último ponto do trajeto JSON
        if (!empty($trajeto)) {
            $ultimoPonto = end($trajeto);
            if ($ultimoPonto && isset($ultimoPonto['latitude'], $ultimoPonto['longitude'])) {
                $posicaoAtual = [
                    'latitude' => floatval($ultimoPonto['latitude']),
                    'longitude' => floatval($ultimoPonto['longitude']),
                    'fonte' => 'trajeto_json'
                ];
                $debug['processamento_viagem_1']['posicao_trajeto_json'] = $posicaoAtual;
            }
        }
        
        // 2. Posição inicial
        if (!$posicaoAtual && $viagemId1['latitude_inicial'] && $viagemId1['longitude_inicial']) {
            $latInicial = floatval($viagemId1['latitude_inicial']);
            $lngInicial = floatval($viagemId1['longitude_inicial']);
            
            $debug['processamento_viagem_1']['lat_inicial_float'] = $latInicial;
            $debug['processamento_viagem_1']['lng_inicial_float'] = $lngInicial;
            $debug['processamento_viagem_1']['lat_inicial_diferente_zero'] = ($latInicial != 0);
            $debug['processamento_viagem_1']['lng_inicial_diferente_zero'] = ($lngInicial != 0);
            $debug['processamento_viagem_1']['lat_inicial_valida'] = ($latInicial >= -90 && $latInicial <= 90);
            $debug['processamento_viagem_1']['lng_inicial_valida'] = ($lngInicial >= -180 && $lngInicial <= 180);
            
            if ($latInicial != 0 && $lngInicial != 0 && 
                $latInicial >= -90 && $latInicial <= 90 && 
                $lngInicial >= -180 && $lngInicial <= 180) {
                
                $posicaoAtual = [
                    'latitude' => $latInicial,
                    'longitude' => $lngInicial,
                    'fonte' => 'posicao_inicial'
                ];
                $debug['processamento_viagem_1']['posicao_inicial_valida'] = $posicaoAtual;
            }
        }
        
        $debug['processamento_viagem_1']['posicao_final'] = $posicaoAtual;
        $debug['processamento_viagem_1']['tem_posicao'] = $posicaoAtual !== null;
    }
    
    // 6. Testar query da API com dados de debug
    $stmt = $pdo->query("
        SELECT 
            v.id,
            v.cliente,
            v.latitude_inicial,
            v.longitude_inicial,
            CASE 
                WHEN v.latitude_inicial IS NULL THEN 'lat_nula'
                WHEN v.latitude_inicial = 0 THEN 'lat_zero'
                WHEN v.latitude_inicial = '' THEN 'lat_vazia'
                WHEN TRIM(v.latitude_inicial) = '' THEN 'lat_trim_vazia'
                ELSE 'lat_ok'
            END as status_latitude,
            CASE 
                WHEN v.longitude_inicial IS NULL THEN 'lng_nula'
                WHEN v.longitude_inicial = 0 THEN 'lng_zero'
                WHEN v.longitude_inicial = '' THEN 'lng_vazia'
                WHEN TRIM(v.longitude_inicial) = '' THEN 'lng_trim_vazia'
                ELSE 'lng_ok'
            END as status_longitude
        FROM viagens v
        WHERE v.data_fim IS NULL
    ");
    $debug['status_coordenadas'] = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    echo json_encode([
        'sucesso' => true,
        'conexao' => $configUsada,
        'timestamp' => date('Y-m-d H:i:s'),
        'debug' => $debug
    ], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
    
} catch (Exception $e) {
    echo json_encode([
        'erro' => true,
        'mensagem' => $e->getMessage(),
        'linha' => $e->getLine(),
        'arquivo' => $e->getFile()
    ], JSON_PRETTY_PRINT);
}
?> 
