// 🚀 PATCH EMERGENCIAL - FORÇA TRACEJADO GPS VIAGEM 79
// Adicione este script na página de detalhes para forçar o funcionamento

console.log('🚀 PATCH EMERGENCIAL CARREGADO - Forçando tracejado GPS');

// Função para forçar desenho do tracejado
function forcarTraceado() {
    console.log('🔧 Forçando desenho do tracejado...');
    
    // Verificar se elementos existem
    const canvas = document.getElementById('mapCanvas');
    if (!canvas) {
        console.error('❌ Canvas #mapCanvas não encontrado!');
        return;
    }
    
    const ctx = canvas.getContext('2d');
    console.log('✅ Canvas encontrado:', canvas.width, 'x', canvas.height);
    
    // Buscar dados da viagem 79 diretamente
    fetch('../api-simples-v2.php?acao=viagem&id=79')
        .then(response => response.json())
        .then(dados => {
            if (!dados.sucesso) {
                console.error('❌ Erro na API:', dados.mensagem);
                return;
            }
            
            const viagem = dados.dados;
            console.log('📦 Dados da viagem carregados:', viagem);
            
            // Determinar pontos GPS
            let pontos = null;
            if (viagem.trajeto_gps && viagem.trajeto_gps.length >= 2) {
                pontos = viagem.trajeto_gps;
                console.log(`🗺️ Usando trajeto_gps: ${pontos.length} pontos`);
            } else if (viagem.trajeto && viagem.trajeto.length >= 2) {
                pontos = viagem.trajeto;
                console.log(`🗺️ Usando trajeto: ${pontos.length} pontos`);
            }
            
            if (!pontos || pontos.length < 2) {
                console.error('❌ Sem pontos GPS suficientes');
                return;
            }
            
            // DESENHAR TRACEJADO DIRETO NO CANVAS
            desenharTraceadoForcado(ctx, pontos, canvas.width, canvas.height);
            
        })
        .catch(error => {
            console.error('❌ Erro ao buscar dados:', error);
        });
}

function desenharTraceadoForcado(ctx, pontos, width, height) {
    console.log(`🎨 Desenhando tracejado forçado com ${pontos.length} pontos`);
    
    // Calcular bounds dos pontos
    const lats = pontos.map(p => parseFloat(p.latitude)).filter(lat => !isNaN(lat) && lat !== 0);
    const lngs = pontos.map(p => parseFloat(p.longitude)).filter(lng => !isNaN(lng) && lng !== 0);
    
    if (lats.length === 0 || lngs.length === 0) {
        console.error('❌ Sem coordenadas válidas');
        return;
    }
    
    const minLat = Math.min(...lats);
    const maxLat = Math.max(...lats);
    const minLng = Math.min(...lngs);
    const maxLng = Math.max(...lngs);
    
    console.log('📍 Bounds calculados:', {
        lat: `${minLat.toFixed(6)} → ${maxLat.toFixed(6)}`,
        lng: `${minLng.toFixed(6)} → ${maxLng.toFixed(6)}`
    });
    
    // Adicionar padding
    const padding = 50;
    const usableWidth = width - 2 * padding;
    const usableHeight = height - 2 * padding;
    
    // Calcular escala
    const latRange = maxLat - minLat || 0.001; // Evitar divisão por zero
    const lngRange = maxLng - minLng || 0.001;
    
    const scaleX = usableWidth / lngRange;
    const scaleY = usableHeight / latRange;
    
    // Usar a menor escala para manter proporção
    const scale = Math.min(scaleX, scaleY);
    
    console.log('📏 Escala calculada:', { scaleX, scaleY, scale });
    
    // Função para converter coordenadas
    function coordToPixel(lat, lng) {
        const x = padding + (lng - minLng) * scale;
        const y = height - (padding + (lat - minLat) * scale);
        return { x, y };
    }
    
    // LIMPAR CANVAS PRIMEIRO
    ctx.clearRect(0, 0, width, height);
    
    // Desenhar fundo para debug
    ctx.fillStyle = '#f0f8ff';
    ctx.fillRect(0, 0, width, height);
    
    // Configurar estilo da linha
    ctx.strokeStyle = '#FF0000'; // VERMELHO PARA DESTACAR
    ctx.lineWidth = 6; // LINHA GROSSA
    ctx.setLineDash([]); // LINHA SÓLIDA
    ctx.lineCap = 'round';
    ctx.lineJoin = 'round';
    
    // DESENHAR TRACEJADO
    ctx.beginPath();
    
    let pontosDesenHados = 0;
    
    for (let i = 0; i < pontos.length; i++) {
        const ponto = pontos[i];
        const lat = parseFloat(ponto.latitude);
        const lng = parseFloat(ponto.longitude);
        
        if (isNaN(lat) || isNaN(lng) || lat === 0 || lng === 0) {
            continue; // Pular coordenadas inválidas
        }
        
        const pos = coordToPixel(lat, lng);
        
        if (pontosDesenHados === 0) {
            ctx.moveTo(pos.x, pos.y);
            console.log(`🎯 Primeiro ponto: (${lat}, ${lng}) → pixel (${pos.x}, ${pos.y})`);
        } else {
            ctx.lineTo(pos.x, pos.y);
        }
        
        pontosDesenHados++;
    }
    
    // DESENHAR A LINHA
    ctx.stroke();
    
    console.log(`✅ Tracejado desenhado! ${pontosDesenHados} pontos válidos`);
    
    // DESENHAR MARCADORES DOS PONTOS
    for (let i = 0; i < pontos.length; i++) {
        const ponto = pontos[i];
        const lat = parseFloat(ponto.latitude);
        const lng = parseFloat(ponto.longitude);
        
        if (isNaN(lat) || isNaN(lng) || lat === 0 || lng === 0) {
            continue;
        }
        
        const pos = coordToPixel(lat, lng);
        
        // Cor do marcador
        ctx.fillStyle = i === 0 ? '#00FF00' : // Verde para início
                       i === pontos.length - 1 ? '#FF0000' : // Vermelho para fim
                       '#0000FF'; // Azul para pontos intermediários
        
        // Desenhar círculo
        ctx.beginPath();
        ctx.arc(pos.x, pos.y, 8, 0, 2 * Math.PI);
        ctx.fill();
        
        // Desenhar número do ponto
        ctx.fillStyle = '#FFFFFF';
        ctx.font = 'bold 10px Arial';
        ctx.textAlign = 'center';
        ctx.fillText(i + 1, pos.x, pos.y + 3);
    }
    
    // Desenhar informações no canvas
    ctx.fillStyle = '#000000';
    ctx.font = 'bold 16px Arial';
    ctx.textAlign = 'left';
    ctx.fillText(`🗺️ TRAJETO GPS - ${pontosDesenHados} pontos`, 10, 25);
    ctx.fillText(`📍 ${minLat.toFixed(4)},${minLng.toFixed(4)} → ${maxLat.toFixed(4)},${maxLng.toFixed(4)}`, 10, 45);
    
    console.log('🏁 Tracejado forçado concluído!');
}

// Função para monitorar e forçar quando necessário
function monitorarEForcar() {
    console.log('👁️ Iniciando monitoramento...');
    
    // Tentar forçar imediatamente
    setTimeout(() => {
        console.log('⏰ Tentativa 1 - Imediata');
        forcarTraceado();
    }, 1000);
    
    // Tentar novamente após 3 segundos
    setTimeout(() => {
        console.log('⏰ Tentativa 2 - 3 segundos');
        forcarTraceado();
    }, 3000);
    
    // Tentar novamente após 5 segundos
    setTimeout(() => {
        console.log('⏰ Tentativa 3 - 5 segundos');
        forcarTraceado();
    }, 5000);
    
    // Adicionar botão para forçar manualmente
    const botaoForcar = document.createElement('button');
    botaoForcar.textContent = '🚀 FORÇAR TRACEJADO';
    botaoForcar.style.position = 'fixed';
    botaoForcar.style.top = '10px';
    botaoForcar.style.right = '10px';
    botaoForcar.style.zIndex = '9999';
    botaoForcar.style.padding = '10px 20px';
    botaoForcar.style.background = '#FF0000';
    botaoForcar.style.color = '#FFFFFF';
    botaoForcar.style.border = 'none';
    botaoForcar.style.borderRadius = '5px';
    botaoForcar.style.cursor = 'pointer';
    botaoForcar.style.fontWeight = 'bold';
    
    botaoForcar.onclick = function() {
        console.log('🔴 Botão de força acionado!');
        forcarTraceado();
    };
    
    document.body.appendChild(botaoForcar);
    console.log('🔴 Botão de força adicionado!');
}

// INICIAR ASSIM QUE O SCRIPT CARREGAR
if (document.readyState === 'loading') {
    document.addEventListener('DOMContentLoaded', monitorarEForcar);
} else {
    monitorarEForcar();
}

console.log('🚀 PATCH EMERGENCIAL CONFIGURADO - Use F12 para ver logs');

// Expor função globalmente para teste manual
window.forcarTraceado = forcarTraceado; 