<?php
/**
 * CORRIGIR ENDEREÇOS DAS VIAGENS
 * Buscar endereços para viagens que só têm coordenadas GPS
 */

header('Content-Type: text/html; charset=utf-8');
set_time_limit(300); // 5 minutos

// Conectar ao banco
$host = 'localhost';
$dbname = 'pinheir3_controle_frotasV1.1';
$username = 'pinheir3_admin';
$password = '080880Gelboy';

function geocodificar($lat, $lng) {
    $url = "https://nominatim.openstreetmap.org/reverse?format=json&lat=$lat&lon=$lng&zoom=16&addressdetails=1";
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    curl_setopt($ch, CURLOPT_USERAGENT, 'ControleDeFretas/1.0');
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    
    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    
    if ($httpCode == 200 && $response) {
        $json = json_decode($response, true);
        if ($json && isset($json['display_name'])) {
            return $json['display_name'];
        }
    }
    
    return null;
}

try {
    $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    echo "<h1>🔧 CORRIGINDO ENDEREÇOS DAS VIAGENS</h1>";
    
    if (isset($_GET['executar'])) {
        echo "<h2>⚙️ PROCESSANDO...</h2>";
        
        $processados = 0;
        $sucessos = 0;
        $erros = 0;
        
        // Buscar viagens sem endereço mas com GPS
        $stmt = $pdo->query("
            SELECT id, cliente, latitude_inicial, longitude_inicial, latitude_final, longitude_final
            FROM viagens 
            WHERE (endereco_inicial IS NULL OR endereco_inicial = '')
            AND latitude_inicial IS NOT NULL 
            AND longitude_inicial IS NOT NULL
            ORDER BY data_inicio DESC
            LIMIT 20
        ");
        
        $viagens = $stmt->fetchAll();
        
        echo "<p><strong>Encontradas:</strong> " . count($viagens) . " viagens para processar</p>";
        
        foreach ($viagens as $viagem) {
            $processados++;
            
            echo "<div style='border: 1px solid #ccc; margin: 10px 0; padding: 10px;'>";
            echo "<h4>Viagem #{$viagem['id']} - {$viagem['cliente']}</h4>";
            
            $endereco_inicial = null;
            $endereco_final = null;
            
            // Geocodificar endereço inicial
            if ($viagem['latitude_inicial'] && $viagem['longitude_inicial']) {
                echo "<p>🔍 Buscando endereço inicial ({$viagem['latitude_inicial']}, {$viagem['longitude_inicial']})...</p>";
                $endereco_inicial = geocodificar($viagem['latitude_inicial'], $viagem['longitude_inicial']);
                
                if ($endereco_inicial) {
                    echo "<p>✅ <strong>Inicial:</strong> " . htmlspecialchars($endereco_inicial) . "</p>";
                } else {
                    echo "<p>❌ Não foi possível obter endereço inicial</p>";
                }
                
                // Pausa para não sobrecarregar a API
                sleep(1);
            }
            
            // Geocodificar endereço final
            if ($viagem['latitude_final'] && $viagem['longitude_final']) {
                echo "<p>🔍 Buscando endereço final ({$viagem['latitude_final']}, {$viagem['longitude_final']})...</p>";
                $endereco_final = geocodificar($viagem['latitude_final'], $viagem['longitude_final']);
                
                if ($endereco_final) {
                    echo "<p>✅ <strong>Final:</strong> " . htmlspecialchars($endereco_final) . "</p>";
                } else {
                    echo "<p>❌ Não foi possível obter endereço final</p>";
                }
                
                sleep(1);
            }
            
            // Atualizar no banco
            if ($endereco_inicial || $endereco_final) {
                $updateStmt = $pdo->prepare("
                    UPDATE viagens 
                    SET endereco_inicial = COALESCE(?, endereco_inicial),
                        endereco_final = COALESCE(?, endereco_final)
                    WHERE id = ?
                ");
                
                if ($updateStmt->execute([$endereco_inicial, $endereco_final, $viagem['id']])) {
                    echo "<p style='color: green;'><strong>💾 Salvo no banco de dados!</strong></p>";
                    $sucessos++;
                } else {
                    echo "<p style='color: red;'><strong>❌ Erro ao salvar no banco</strong></p>";
                    $erros++;
                }
            } else {
                echo "<p style='color: orange;'><strong>⚠️ Nenhum endereço encontrado</strong></p>";
                $erros++;
            }
            
            echo "</div>";
            
            // Flush output para mostrar progresso
            if (ob_get_level()) {
                ob_flush();
            }
            flush();
        }
        
        echo "<h2>📊 RESUMO FINAL</h2>";
        echo "<div style='background: #e8f5e8; padding: 15px; border-radius: 5px;'>";
        echo "<p><strong>Processadas:</strong> $processados viagens</p>";
        echo "<p><strong>Sucessos:</strong> $sucessos</p>";
        echo "<p><strong>Erros:</strong> $erros</p>";
        echo "</div>";
        
        echo "<p><a href='enderecos-rapido.php' style='background: blue; color: white; padding: 10px; text-decoration: none;'>🔍 Verificar Resultado</a></p>";
        
    } else {
        // Mostrar prévia
        echo "<h2>📋 PRÉVIA DAS VIAGENS A PROCESSAR</h2>";
        
        $stmt = $pdo->query("
            SELECT COUNT(*) as total
            FROM viagens 
            WHERE (endereco_inicial IS NULL OR endereco_inicial = '')
            AND latitude_inicial IS NOT NULL 
            AND longitude_inicial IS NOT NULL
        ");
        $total = $stmt->fetch()['total'];
        
        echo "<p><strong>Total de viagens sem endereço:</strong> $total</p>";
        
        if ($total > 0) {
            $stmt = $pdo->query("
                SELECT id, cliente, data_inicio, latitude_inicial, longitude_inicial
                FROM viagens 
                WHERE (endereco_inicial IS NULL OR endereco_inicial = '')
                AND latitude_inicial IS NOT NULL 
                AND longitude_inicial IS NOT NULL
                ORDER BY data_inicio DESC
                LIMIT 10
            ");
            
            echo "<h3>Primeiras 10 viagens:</h3>";
            echo "<table border='1' style='width:100%; border-collapse: collapse;'>";
            echo "<tr><th>ID</th><th>Cliente</th><th>Data</th><th>GPS Inicial</th></tr>";
            
            while ($row = $stmt->fetch()) {
                echo "<tr>";
                echo "<td>{$row['id']}</td>";
                echo "<td>{$row['cliente']}</td>";
                echo "<td>" . date('d/m H:i', strtotime($row['data_inicio'])) . "</td>";
                echo "<td>{$row['latitude_inicial']}, {$row['longitude_inicial']}</td>";
                echo "</tr>";
            }
            echo "</table>";
            
            echo "<div style='background: #fff3cd; padding: 15px; margin: 20px 0; border-radius: 5px;'>";
            echo "<h3>⚠️ IMPORTANTE:</h3>";
            echo "<ul>";
            echo "<li>Este processo irá buscar endereços para as primeiras <strong>20 viagens</strong></li>";
            echo "<li>Cada busca demora ~1 segundo (para não sobrecarregar a API)</li>";
            echo "<li>Tempo estimado: ~40 segundos</li>";
            echo "<li>Os endereços serão salvos automaticamente no banco</li>";
            echo "</ul>";
            echo "</div>";
            
            echo "<p style='text-align: center;'>";
            echo "<a href='?executar=1' style='background: green; color: white; padding: 15px 30px; text-decoration: none; font-size: 18px; border-radius: 5px;'>";
            echo "🚀 EXECUTAR CORREÇÃO";
            echo "</a>";
            echo "</p>";
        } else {
            echo "<div style='background: #e8f5e8; padding: 15px; border-radius: 5px;'>";
            echo "<h3>✅ Todas as viagens já têm endereços!</h3>";
            echo "<p>Não há nada para corrigir.</p>";
            echo "</div>";
        }
    }
    
} catch (Exception $e) {
    echo "<h1 style='color: red;'>ERRO: " . $e->getMessage() . "</h1>";
}
?> 
