<?php
/**
 * Script para testar o calculo de distancia por enderecos
 */

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

require_once 'conexao.php';

try {
    $pdo = conectarBanco();
    
    echo "<!DOCTYPE html>";
    echo "<html>";
    echo "<head>";
    echo "<meta charset='utf-8'>";
    echo "<title>Teste Calculo Enderecos</title>";
    echo "<style>";
    echo "body { font-family: Arial, sans-serif; margin: 20px; }";
    echo ".success { color: green; }";
    echo ".error { color: red; }";
    echo ".info { color: blue; }";
    echo "</style>";
    echo "</head>";
    echo "<body>";
    
    echo "<h1>TESTE DE CALCULO POR ENDERECOS</h1>";
    echo "<hr>";
    
    // Funcao para estimar distancia baseada em enderecos
    function estimarDistanciaPorEndereco($endereco1, $endereco2) {
        if (empty($endereco1) || empty($endereco2)) {
            return 5; // Valor padrao se endereco vazio
        }
        
        // Normalizar enderecos para comparacao
        $end1 = strtolower(trim($endereco1));
        $end2 = strtolower(trim($endereco2));
        
        // Se enderecos sao identicos ou muito similares
        if ($end1 === $end2 || similar_text($end1, $end2) > strlen($end1) * 0.8) {
            return 0.5; // Mesmo local ou muito proximo
        }
        
        // Verificar se sao bairros diferentes
        $bairros = [
            'atalaia' => ['lat' => -10.9456, 'lng' => -37.0714],
            'sao jose' => ['lat' => -10.9167, 'lng' => -37.0500],
            'centro' => ['lat' => -10.9091, 'lng' => -37.0677],
            'coroa do meio' => ['lat' => -10.9000, 'lng' => -37.0833],
            'grageru' => ['lat' => -10.9200, 'lng' => -37.0800],
            'inacio barbosa' => ['lat' => -10.9300, 'lng' => -37.0900],
            'salgado filho' => ['lat' => -10.9100, 'lng' => -37.0600],
            '13 de julho' => ['lat' => -10.9050, 'lng' => -37.0750],
            'farolandia' => ['lat' => -10.9150, 'lng' => -37.0850],
            'jardins' => ['lat' => -10.9250, 'lng' => -37.0650]
        ];
        
        $bairro1 = null;
        $bairro2 = null;
        
        foreach ($bairros as $bairro => $coords) {
            if (strpos($end1, $bairro) !== false) {
                $bairro1 = $coords;
            }
            if (strpos($end2, $bairro) !== false) {
                $bairro2 = $coords;
            }
        }
        
        // Se encontrou ambos os bairros, calcular distancia real
        if ($bairro1 && $bairro2) {
            $r = 6371; // Raio da Terra em km
            $dLat = deg2rad($bairro2['lat'] - $bairro1['lat']);
            $dLon = deg2rad($bairro2['lng'] - $bairro1['lng']);
            $a = sin($dLat/2) * sin($dLat/2) + cos(deg2rad($bairro1['lat'])) * cos(deg2rad($bairro2['lat'])) * sin($dLon/2) * sin($dLon/2);
            $c = 2 * atan2(sqrt($a), sqrt(1-$a));
            return $r * $c;
        }
        
        // Se nao conseguiu identificar bairros, usar estimativa baseada em palavras-chave
        $palavras_distancia = [
            'atalaia' => 8, 'sao jose' => 3, 'centro' => 0, 'coroa do meio' => 2,
            'grageru' => 1, 'inacio barbosa' => 4, 'salgado filho' => 2, '13 de julho' => 1,
            'farolandia' => 3, 'jardins' => 2
        ];
        
        $dist1 = 0;
        $dist2 = 0;
        
        foreach ($palavras_distancia as $palavra => $dist) {
            if (strpos($end1, $palavra) !== false) {
                $dist1 = $dist;
            }
            if (strpos($end2, $palavra) !== false) {
                $dist2 = $dist;
            }
        }
        
        return abs($dist1 - $dist2) + 1; // Minimo 1km
    }
    
    // 1. Testar com enderecos de exemplo
    echo "<h2>TESTES COM ENDERECOS DE EXEMPLO:</h2>";
    
    $testes = [
        ['AVENIDA SANTOS DUMONT, 543, ATALAIA', 'RUA SENADOR ROLLEMBER, 301, SAO JOSE'],
        ['RUA SENADOR ROLLEMBER, 301, SAO JOSE', 'AVENIDA SANTOS DUMONT, 543, ATALAIA'],
        ['RUA DO CENTRO, 100, CENTRO', 'RUA DO CENTRO, 200, CENTRO'],
        ['AVENIDA SANTOS DUMONT, 543, ATALAIA', 'RUA QUALQUER, 123, GRAGERU'],
        ['RUA TESTE, 456, FAROLANDIA', 'AVENIDA TESTE, 789, JARDINS']
    ];
    
    foreach ($testes as $i => $teste) {
        $distancia = estimarDistanciaPorEndereco($teste[0], $teste[1]);
        echo "<p><strong>Teste " . ($i + 1) . ":</strong></p>";
        echo "<p>De: " . htmlspecialchars($teste[0]) . "</p>";
        echo "<p>Para: " . htmlspecialchars($teste[1]) . "</p>";
        echo "<p class='info'>Distancia estimada: " . round($distancia, 2) . "km</p><br>";
    }
    
    // 2. Testar com rotas reais do banco
    echo "<h2>TESTES COM ROTAS REAIS:</h2>";
    
    $stmt = $pdo->prepare("SELECT id, titulo FROM solicitacoes_rotas ORDER BY id DESC LIMIT 3");
    $stmt->execute();
    $rotas = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    foreach ($rotas as $rota) {
        echo "<h3>Rota: " . htmlspecialchars($rota['titulo']) . " (ID: {$rota['id']})</h3>";
        
        // Buscar clientes da rota
        $stmt = $pdo->prepare("
            SELECT rc.nome_cliente, rc.endereco, rc.ordem_sequencia 
            FROM rota_clientes rc 
            WHERE rc.solicitacao_rota_id = ? 
            ORDER BY rc.ordem_sequencia
        ");
        $stmt->execute([$rota['id']]);
        $clientes = $stmt->fetchAll(PDO::FETCH_ASSOC);
        
        if (count($clientes) >= 2) {
            $kmTotal = 0;
            
            for ($i = 0; $i < count($clientes) - 1; $i++) {
                $cliente1 = $clientes[$i];
                $cliente2 = $clientes[$i + 1];
                
                $distancia = estimarDistanciaPorEndereco($cliente1['endereco'], $cliente2['endereco']);
                $kmTotal += $distancia;
                
                echo "<p>Segmento {$cliente1['ordem_sequencia']} -> {$cliente2['ordem_sequencia']}:</p>";
                echo "<p>" . htmlspecialchars($cliente1['nome_cliente']) . " -> " . htmlspecialchars($cliente2['nome_cliente']) . "</p>";
                echo "<p class='info'>Distancia: " . round($distancia, 2) . "km</p>";
            }
            
            echo "<p class='success'><strong>TOTAL CALCULADO: " . round($kmTotal, 2) . "km</strong></p>";
            
            // Verificar km_estimado atual
            $stmt = $pdo->prepare("SELECT km_estimado FROM solicitacoes_rotas WHERE id = ?");
            $stmt->execute([$rota['id']]);
            $kmAtual = $stmt->fetch()['km_estimado'];
            
            echo "<p><strong>KM ATUAL NO BANCO: {$kmAtual}km</strong></p>";
            
            if ($kmTotal != $kmAtual) {
                echo "<p class='error'>DIFERENCA! Atualizando...</p>";
                
                $stmt = $pdo->prepare("UPDATE solicitacoes_rotas SET km_estimado = ? WHERE id = ?");
                $stmt->execute([round($kmTotal, 2), $rota['id']]);
                
                echo "<p class='success'>KM estimado atualizado!</p>";
            } else {
                echo "<p class='success'>Calculo correto!</p>";
            }
        } else {
            echo "<p class='error'>Rota com menos de 2 clientes</p>";
        }
        
        echo "<hr>";
    }
    
    // 3. Verificar resultado final
    echo "<h2>VERIFICACAO FINAL:</h2>";
    
    $stmt = $pdo->prepare("SELECT COUNT(*) as total FROM solicitacoes_rotas WHERE km_estimado > 0");
    $stmt->execute();
    $rotasComKm = $stmt->fetch()['total'];
    
    $stmt = $pdo->prepare("SELECT COUNT(*) as total FROM solicitacoes_rotas");
    $stmt->execute();
    $totalRotas = $stmt->fetch()['total'];
    
    echo "<p class='info'>Rotas com KM estimado: $rotasComKm/$totalRotas</p>";
    
    echo "<h2>TESTE CONCLUIDO!</h2>";
    echo "<p class='success'>Agora o km_estimado e calculado automaticamente usando os enderecos!</p>";
    
    echo "</body>";
    echo "</html>";
    
} catch (Exception $e) {
    echo "<p class='error'>ERRO: " . htmlspecialchars($e->getMessage()) . "</p>";
}
?>
