<?php
/**
 * Script de teste para verificar o cálculo do km_estimado
 */

require_once 'conexao.php';

try {
    $pdo = conectarBanco();
    
    echo "🧮 TESTE DE CÁLCULO DE KM ESTIMADO\n";
    echo "==================================\n\n";
    
    // 1. Verificar rotas existentes
    $stmt = $pdo->prepare("SELECT id, titulo, km_estimado FROM solicitacoes_rotas ORDER BY id DESC LIMIT 5");
    $stmt->execute();
    $rotas = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    echo "📊 ÚLTIMAS 5 ROTAS:\n";
    echo "==================\n";
    
    foreach ($rotas as $rota) {
        echo "ID: {$rota['id']} - {$rota['titulo']} - KM: {$rota['km_estimado']}km\n";
        
        // Buscar clientes da rota
        $stmt = $pdo->prepare("
            SELECT rc.nome_cliente, rc.ordem_sequencia, c.latitude, c.longitude 
            FROM rota_clientes rc 
            LEFT JOIN clientes c ON rc.nome_cliente = c.nome 
            WHERE rc.solicitacao_rota_id = ? 
            ORDER BY rc.ordem_sequencia
        ");
        $stmt->execute([$rota['id']]);
        $clientes = $stmt->fetchAll(PDO::FETCH_ASSOC);
        
        echo "   👥 Clientes: " . count($clientes) . "\n";
        
        foreach ($clientes as $cliente) {
            $coord = $cliente['latitude'] && $cliente['longitude'] 
                ? "({$cliente['latitude']}, {$cliente['longitude']})" 
                : "SEM COORDENADAS";
            echo "   #{$cliente['ordem_sequencia']} {$cliente['nome_cliente']} - $coord\n";
        }
        echo "\n";
    }
    
    // 2. Testar cálculo manual
    echo "🧮 TESTE DE CÁLCULO MANUAL:\n";
    echo "===========================\n";
    
    if (count($rotas) > 0) {
        $rotaTeste = $rotas[0];
        
        // Buscar clientes da rota
        $stmt = $pdo->prepare("
            SELECT rc.nome_cliente, rc.ordem_sequencia, c.latitude, c.longitude 
            FROM rota_clientes rc 
            LEFT JOIN clientes c ON rc.nome_cliente = c.nome 
            WHERE rc.solicitacao_rota_id = ? 
            ORDER BY rc.ordem_sequencia
        ");
        $stmt->execute([$rotaTeste['id']]);
        $clientes = $stmt->fetchAll(PDO::FETCH_ASSOC);
        
        echo "Testando cálculo para rota: {$rotaTeste['titulo']}\n";
        echo "Clientes encontrados: " . count($clientes) . "\n\n";
        
        if (count($clientes) >= 2) {
            // Função para calcular distância
            function calcularDistancia($lat1, $lon1, $lat2, $lon2) {
                $r = 6371; // Raio da Terra em km
                $dLat = deg2rad($lat2 - $lat1);
                $dLon = deg2rad($lon2 - $lon1);
                $a = sin($dLat/2) * sin($dLat/2) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * sin($dLon/2) * sin($dLon/2);
                $c = 2 * atan2(sqrt($a), sqrt(1-$a));
                return $r * $c;
            }
            
            $kmCalculado = 0;
            
            for ($i = 0; $i < count($clientes) - 1; $i++) {
                $cliente1 = $clientes[$i];
                $cliente2 = $clientes[$i + 1];
                
                echo "Segmento {$cliente1['ordem_sequencia']} → {$cliente2['ordem_sequencia']}:\n";
                echo "  {$cliente1['nome_cliente']} → {$cliente2['nome_cliente']}\n";
                
                if ($cliente1['latitude'] && $cliente2['latitude']) {
                    $distancia = calcularDistancia(
                        $cliente1['latitude'], $cliente1['longitude'],
                        $cliente2['latitude'], $cliente2['longitude']
                    );
                    $kmCalculado += $distancia;
                    echo "  📏 Distância calculada: " . round($distancia, 2) . "km\n";
                } else {
                    $kmCalculado += 5; // Valor padrão
                    echo "  📏 Distância padrão: 5km (sem coordenadas)\n";
                }
                echo "\n";
            }
            
            $kmCalculado = round($kmCalculado, 2);
            echo "🎯 TOTAL CALCULADO: {$kmCalculado}km\n";
            echo "🎯 KM ATUAL NO BANCO: {$rotaTeste['km_estimado']}km\n";
            
            if ($kmCalculado != $rotaTeste['km_estimado']) {
                echo "⚠️  DIFERENÇA DETECTADA! Atualizando...\n";
                
                $stmt = $pdo->prepare("UPDATE solicitacoes_rotas SET km_estimado = ? WHERE id = ?");
                $stmt->execute([$kmCalculado, $rotaTeste['id']]);
                
                echo "✅ KM estimado atualizado para {$kmCalculado}km\n";
            } else {
                echo "✅ Cálculo correto!\n";
            }
        } else {
            echo "⚠️  Rota com menos de 2 clientes - usando valor padrão\n";
        }
    }
    
    // 3. Verificar clientes sem coordenadas
    echo "\n📋 CLIENTES SEM COORDENADAS:\n";
    echo "============================\n";
    
    $stmt = $pdo->prepare("SELECT COUNT(*) as total FROM clientes WHERE latitude IS NULL OR longitude IS NULL");
    $stmt->execute();
    $clientesSemCoord = $stmt->fetch()['total'];
    
    $stmt = $pdo->prepare("SELECT COUNT(*) as total FROM clientes");
    $stmt->execute();
    $totalClientes = $stmt->fetch()['total'];
    
    echo "Clientes sem coordenadas: $clientesSemCoord/$totalClientes\n";
    
    if ($clientesSemCoord > 0) {
        echo "⚠️  Execute o script adicionar-coordenadas-clientes-rotas.php para corrigir!\n";
    } else {
        echo "✅ Todos os clientes têm coordenadas!\n";
    }
    
    echo "\n✅ TESTE CONCLUÍDO!\n";
    
} catch (Exception $e) {
    echo "❌ ERRO: " . $e->getMessage() . "\n";
}
?>
