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

echo "<h1>🔧 Corrigir Estrutura da Coluna km_gps_final</h1>";

try {
    $host = 'localhost';
    $dbname = 'pinheir3_controle_frotasV1.1';
    $username = 'pinheir3_admin';
    $password = '080880Gelboy';
    
    $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $username, $password, [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    ]);
    
    echo "<h2>1️⃣ Problema Identificado</h2>";
    
    echo "<div style='background: #f8d7da; padding: 15px; border-radius: 5px; border: 1px solid #f5c6cb;'>";
    echo "<h3>🚨 CAUSA RAIZ ENCONTRADA:</h3>";
    echo "<p><strong>A coluna km_gps_final tem estrutura decimal(10,6)!</strong></p>";
    echo "<ul>";
    echo "<li>❌ <strong>10 dígitos totais</strong> (incluindo decimais)</li>";
    echo "<li>❌ <strong>6 casas decimais</strong> = 4 dígitos inteiros</li>";
        echo "<li>❌ <strong>Valor máximo:</strong> 9999.999999</li>";
        echo "<li>❌ <strong>52 km = 52000 metros</strong> não cabe!</li>";
        echo "</ul>";
        echo "<p><strong>O sistema está truncando automaticamente para 9999.999999!</strong></p>";
        echo "</div>";
        
        echo "<h2>2️⃣ Solução: Alterar Estrutura da Coluna</h2>";
        
        echo "<p><strong>Alterando coluna para decimal(10,2)...</strong></p>";
        echo "<ul>";
        echo "<li><strong>decimal(10,2)</strong> = 8 dígitos inteiros + 2 decimais</li>";
        echo "<li><strong>Valor máximo:</strong> 99.999.999,99</li>";
        echo "<li><strong>Suporta:</strong> Até 99.999.999 km</li>";
        echo "</ul>";
        
        try {
            // Alterar estrutura da coluna
            $pdo->exec("ALTER TABLE viagens MODIFY COLUMN km_gps_final DECIMAL(10,2)");
            echo "<p style='color: green;'>✅ Coluna alterada com sucesso para decimal(10,2)!</p>";
            
            // Verificar nova estrutura
            $stmt = $pdo->prepare("
                SELECT COLUMN_TYPE, NUMERIC_PRECISION, NUMERIC_SCALE
                FROM INFORMATION_SCHEMA.COLUMNS 
                WHERE TABLE_SCHEMA = ? 
                AND TABLE_NAME = 'viagens' 
                AND COLUMN_NAME = 'km_gps_final'
            ");
            $stmt->execute([$dbname]);
            $novaEstrutura = $stmt->fetch();
            
            echo "<p><strong>Nova estrutura:</strong> {$novaEstrutura['COLUMN_TYPE']}</p>";
            echo "<p><strong>Precisão:</strong> {$novaEstrutura['NUMERIC_PRECISION']}</p>";
            echo "<p><strong>Escala:</strong> {$novaEstrutura['NUMERIC_SCALE']}</p>";
            
        } catch (Exception $e) {
            echo "<p style='color: red;'>❌ Erro ao alterar coluna: " . $e->getMessage() . "</p>";
            exit;
        }
        
        echo "<h2>3️⃣ Testando Atualização com Nova Estrutura</h2>";
        
        // Testar atualização da viagem #1
        echo "<p><strong>Testando atualização da viagem #1...</strong></p>";
        
        try {
            $stmt = $pdo->prepare("UPDATE viagens SET km_gps_final = 52000 WHERE id = 1");
            $stmt->execute();
            
            if ($stmt->rowCount() > 0) {
                echo "<p style='color: green;'>✅ Atualização realizada com sucesso!</p>";
                
                // Verificar se foi atualizado
                $stmt = $pdo->prepare("SELECT km_gps_final FROM viagens WHERE id = 1");
                $stmt->execute();
                $resultado = $stmt->fetch();
                
                echo "<p><strong>Valor após correção:</strong> {$resultado['km_gps_final']} metros</p>";
                
                if ($resultado['km_gps_final'] == 52000) {
                    echo "<p style='color: green; font-weight: bold;'>🎉 PROBLEMA RESOLVIDO! VALOR SALVO CORRETAMENTE!</p>";
                } else {
                    echo "<p style='color: red;'>❌ VALOR AINDA INCORRETO!</p>";
                }
            } else {
                echo "<p style='color: red;'>❌ Erro na atualização</p>";
            }
        } catch (Exception $e) {
            echo "<p style='color: red;'>❌ Erro na atualização: " . $e->getMessage() . "</p>";
        }
        
        echo "<h2>4️⃣ Corrigindo Todas as Viagens</h2>";
        
        // Corrigir todas as viagens
        echo "<p><strong>Corrigindo todas as viagens...</strong></p>";
        
        try {
            $stmt = $pdo->prepare("
                UPDATE viagens 
                SET km_gps_final = (km_final - km_inicial) * 1000 
                WHERE km_final > km_inicial
            ");
            $stmt->execute();
            
            $linhasAfetadas = $stmt->rowCount();
            echo "<p style='color: green;'>✅ {$linhasAfetadas} viagens corrigidas!</p>";
            
            // Verificar resultado
            $stmt = $pdo->prepare("
                SELECT id, cliente, km_gps_final, (km_final - km_inicial) as km_manual
                FROM viagens 
                WHERE km_final > km_inicial 
                ORDER BY id
            ");
            $stmt->execute();
            $viagensCorrigidas = $stmt->fetchAll();
            
            echo "<table border='1' style='border-collapse: collapse; margin: 10px 0; width: 100%;'>";
            echo "<tr style='background: #e8f5e8;'>";
            echo "<th>ID</th><th>Cliente</th><th>KM Manual</th><th>KM GPS Final (m)</th><th>KM GPS Final (km)</th><th>Status</th>";
            echo "</tr>";
            
            foreach ($viagensCorrigidas as $v) {
                $kmGpsKm = $v['km_gps_final'] > 0 ? $v['km_gps_final'] / 1000 : 0;
                $status = abs($v['km_manual'] - $kmGpsKm) < 0.1 ? "✅ OK" : "❌ Diferente";
                
                echo "<tr>";
                echo "<td>{$v['id']}</td>";
                echo "<td>{$v['cliente']}</td>";
                echo "<td>{$v['km_manual']} km</td>";
                echo "<td>{$v['km_gps_final']} m</td>";
                echo "<td>" . number_format($kmGpsKm, 3) . " km</td>";
                echo "<td>{$status}</td>";
                echo "</tr>";
            }
            echo "</table>";
            
        } catch (Exception $e) {
            echo "<p style='color: red;'>❌ Erro ao corrigir viagens: " . $e->getMessage() . "</p>";
        }
        
        echo "<h2>5️⃣ Resumo da Correção</h2>";
        
        echo "<div style='background: #d4edda; padding: 15px; border-radius: 5px; border: 1px solid #c3e6cb;'>";
        echo "<h3>✅ PROBLEMA RESOLVIDO:</h3>";
        echo "<ul>";
        echo "<li><strong>Causa raiz:</strong> Coluna decimal(10,6) limitava valores</li>";
        echo "<li><strong>Solução:</strong> Alterada para decimal(10,2)</li>";
        echo "<li><strong>Resultado:</strong> Agora suporta até 99.999.999 km</li>";
        echo "<li><strong>Status:</strong> Todas as viagens corrigidas</li>";
        echo "</ul>";
        echo "</div>";
        
        echo "<h2>6️⃣ Próximos Passos</h2>";
        
        echo "<div style='background: #d1ecf1; padding: 15px; border-radius: 5px; border: 1px solid #bee5eb;'>";
        echo "<h3>📋 AÇÃO IMEDIATA:</h3>";
        echo "<ol>";
        echo "<li><strong>Atualize o dashboard</strong> (F5 ou Ctrl+F5)</li>";
        echo "<li><strong>Verifique se o KM GPS</strong> agora aparece correto</li>";
        echo "<li><strong>Confirme que não há mais avisos</strong> de diferença</li>";
        echo "<li><strong>Teste com novas viagens</strong> para confirmar correção</li>";
        echo "</ol>";
        echo "</div>";
        
    } catch (PDOException $e) {
        echo "<p style='color: red;'>❌ Erro de banco: " . $e->getMessage() . "</p>";
    } catch (Exception $e) {
        echo "<p style='color: red;'>❌ Erro geral: " . $e->getMessage() . "</p>";
    }
    ?>
