<?php
// Script para corrigir a API finalizar-viagem
// URL: sistemas.pinheiroempresas.com.br/controlefrota/backend-php/corrigir-api-finalizar-viagem.php

header('Content-Type: text/html; charset=utf-8');
echo "<h1>🔧 Correção da API finalizar-viagem</h1>";

// Configuração do banco
$host = 'localhost';
$dbname = 'pinheir3_controle_frotasV1.1';
$username = 'pinheir3_admin';
$password = '080880Gelboy';

try {
    $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    echo "<p>✅ Conectado ao banco de dados</p>";
    
    // 1. Verificar viagens com KM GPS = 1 (problema)
    echo "<h2>📊 Viagens com KM GPS = 1 (problema):</h2>";
    $stmt = $pdo->prepare("SELECT id, tecnico_id, cliente, km_inicial, km_final, km_gps_final, data_inicio, data_fim FROM viagens WHERE km_gps_final = 1 ORDER BY id DESC");
    $stmt->execute();
    $viagensProblema = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    if (empty($viagensProblema)) {
        echo "<p style='color: green;'>✅ Nenhuma viagem com KM GPS = 1 encontrada</p>";
    } else {
        echo "<p style='color: red;'>❌ Encontradas " . count($viagensProblema) . " viagens com KM GPS = 1</p>";
        echo "<table border='1' style='border-collapse: collapse; width: 100%;'>";
        echo "<tr style='background: #ffe6e6;'>";
        echo "<th>ID</th>";
        echo "<th>Técnico</th>";
        echo "<th>Cliente</th>";
        echo "<th>KM Manual</th>";
        echo "<th>Data</th>";
        echo "</tr>";
        
        foreach ($viagensProblema as $viagem) {
            $kmManual = $viagem['km_final'] - $viagem['km_inicial'];
            echo "<tr>";
            echo "<td><strong>{$viagem['id']}</strong></td>";
            echo "<td>{$viagem['tecnico_id']}</td>";
            echo "<td>{$viagem['cliente']}</td>";
            echo "<td>{$kmManual} km</td>";
            echo "<td>{$viagem['data_inicio']}</td>";
            echo "</tr>";
        }
        echo "</table>";
    }
    
    // 2. Corrigir viagens com KM GPS = 1
    if (!empty($viagensProblema)) {
        echo "<h2>🔧 Corrigindo viagens com KM GPS = 1:</h2>";
        
        $corrigidas = 0;
        foreach ($viagensProblema as $viagem) {
            $kmManual = $viagem['km_final'] - $viagem['km_inicial'];
            
            // Calcular KM GPS baseado no KM manual (aproximação)
            $kmGpsCorrigido = max(1, $kmManual * 1000); // Converter para metros, mínimo 1
            
            echo "<p>Corrigindo viagem #{$viagem['id']}: KM Manual = {$kmManual} km → KM GPS = {$kmGpsCorrigido} metros</p>";
            
            $stmt = $pdo->prepare("UPDATE viagens SET km_gps_final = ? WHERE id = ?");
            $stmt->execute([$kmGpsCorrigido, $viagem['id']]);
            
            if ($stmt->rowCount() > 0) {
                $corrigidas++;
                echo "<p style='color: green;'>✅ Viagem #{$viagem['id']} corrigida</p>";
            } else {
                echo "<p style='color: red;'>❌ Erro ao corrigir viagem #{$viagem['id']}</p>";
            }
        }
        
        echo "<p style='color: green;'>✅ Total de viagens corrigidas: {$corrigidas}</p>";
    }
    
    // 3. Criar correção permanente na API
    echo "<h2>🔧 Criando correção permanente na API:</h2>";
    
    $apiFile = 'api-simples-v2.php';
    $apiContent = file_get_contents($apiFile);
    
    // Buscar a linha problemática
    $linhaProblema = '// ACEITAR AMBOS: km_rodados E kmGpsFinal';
    $linhaProblema2 = '$kmGps = isset($input[\'km_rodados\']) ? floatval($input[\'km_rodados\']) : 
         (isset($input[\'kmGpsFinal\']) ? floatval($input[\'kmGpsFinal\']) : null);';
    
    if (strpos($apiContent, $linhaProblema) !== false) {
        echo "<p>✅ Linha problemática encontrada na API</p>";
        
        // Criar correção
        $correcao = '// ACEITAR AMBOS: km_rodados E kmGpsFinal (COM VALIDAÇÃO)
                $kmGps = isset($input[\'km_rodados\']) ? floatval($input[\'km_rodados\']) : 
                         (isset($input[\'kmGpsFinal\']) ? floatval($input[\'kmGpsFinal\']) : null);
                
                // 🔧 CORREÇÃO: Validar KM GPS para evitar valores incorretos
                if ($kmGps !== null && $kmGps <= 1) {
                    error_log("⚠️ KM GPS inválido recebido: $kmGps - Calculando baseado no KM manual");
                    // Calcular KM GPS baseado na diferença entre KM inicial e final
                    $kmManual = $viagem[\'km_final\'] - $viagem[\'km_inicial\'];
                    $kmGps = max(1, $kmManual * 1000); // Converter para metros, mínimo 1
                    error_log("✅ KM GPS corrigido para: $kmGps metros");
                }';
        
        // Substituir na API
        $apiContentCorrigida = str_replace($linhaProblema2, $correcao, $apiContent);
        
        // Fazer backup
        $backupFile = 'api-simples-v2-backup-' . date('Y-m-d-H-i-s') . '.php';
        file_put_contents($backupFile, $apiContent);
        echo "<p>✅ Backup criado: {$backupFile}</p>";
        
        // Aplicar correção
        file_put_contents($apiFile, $apiContentCorrigida);
        echo "<p style='color: green;'>✅ API corrigida com validação de KM GPS</p>";
        
    } else {
        echo "<p style='color: orange;'>⚠️ Linha problemática não encontrada na API</p>";
    }
    
    // 4. Criar script de monitoramento
    echo "<h2>🔧 Criando script de monitoramento:</h2>";
    
    $monitorScript = '<?php
// Script de monitoramento para KM GPS incorreto
// URL: sistemas.pinheiroempresas.com.br/controlefrota/backend-php/monitor-km-gps.php

header(\'Content-Type: text/html; charset=utf-8\');

$host = \'localhost\';
$dbname = \'pinheir3_controle_frotasV1.1\';
$username = \'pinheir3_admin\';
$password = \'080880Gelboy\';

try {
    $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    // Verificar viagens com KM GPS suspeito
    $stmt = $pdo->prepare("SELECT id, tecnico_id, cliente, km_inicial, km_final, km_gps_final, data_inicio FROM viagens WHERE km_gps_final <= 1 AND data_fim IS NOT NULL ORDER BY data_inicio DESC LIMIT 10");
    $stmt->execute();
    $viagensSuspeitas = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    if (!empty($viagensSuspeitas)) {
        echo "<h2>⚠️ Viagens com KM GPS suspeito:</h2>";
        foreach ($viagensSuspeitas as $viagem) {
            $kmManual = $viagem[\'km_final\'] - $viagem[\'km_inicial\'];
            echo "<p>Viagem #{$viagem[\'id\']}: KM Manual = {$kmManual} km, KM GPS = {$viagem[\'km_gps_final\']} metros</p>";
        }
    } else {
        echo "<p style=\'color: green;\'>✅ Nenhuma viagem com KM GPS suspeito encontrada</p>";
    }
    
} catch (PDOException $e) {
    echo "<p style=\'color: red;\'>❌ Erro: " . $e->getMessage() . "</p>";
}
?>';
    
    file_put_contents('monitor-km-gps.php', $monitorScript);
    echo "<p>✅ Script de monitoramento criado: monitor-km-gps.php</p>";
    
    echo "<h2>🎯 Resumo das Correções:</h2>";
    echo "<ul>";
    echo "<li>✅ Viagens com KM GPS = 1 corrigidas</li>";
    echo "<li>✅ API finalizar-viagem com validação</li>";
    echo "<li>✅ Script de monitoramento criado</li>";
    echo "</ul>";
    
    echo "<h2>📱 Próximos Passos:</h2>";
    echo "<ol>";
    echo "<li>Testar a API corrigida</li>";
    echo "<li>Monitorar viagens futuras</li>";
    echo "<li>Verificar se o problema não se repete</li>";
    echo "</ol>";
    
} catch (PDOException $e) {
    echo "<p style='color: red;'>❌ Erro no banco de dados: " . $e->getMessage() . "</p>";
}
?>
