-- ===================================================================
-- CORREÇÃO ABRANGENTE: KM GPS para TODAS as viagens com problema
-- Data: 2025-01-25
-- Problema: App enviava 'kmGpsFinal' mas API esperava 'km_rodados'
-- Resultado: Viagens com coordenadas válidas mas km_gps_final = NULL
-- ===================================================================

-- 1. IDENTIFICAR VIAGENS COM PROBLEMA
SELECT 
    id, cliente, 
    data_inicio, data_fim,
    latitude_inicial, longitude_inicial,
    latitude_final, longitude_final,
    km_gps_final,
    ROUND(
        6371 * acos(
            cos(radians(latitude_inicial)) * 
            cos(radians(latitude_final)) * 
            cos(radians(longitude_final) - radians(longitude_inicial)) + 
            sin(radians(latitude_inicial)) * 
            sin(radians(latitude_final))
        ), 3
    ) AS km_que_deveria_ter
FROM viagens 
WHERE km_gps_final IS NULL 
AND latitude_inicial IS NOT NULL 
AND longitude_inicial IS NOT NULL
AND latitude_final IS NOT NULL 
AND longitude_final IS NOT NULL
AND data_inicio >= '2024-01-01'  -- Apenas viagens recentes
ORDER BY data_inicio DESC;

-- 2. ESTATÍSTICAS ANTES DA CORREÇÃO
SELECT 
    COUNT(*) as total_viagens_problema,
    MIN(data_inicio) as primeira_viagem_problema,
    MAX(data_inicio) as ultima_viagem_problema,
    AVG(
        6371 * acos(
            cos(radians(latitude_inicial)) * 
            cos(radians(latitude_final)) * 
            cos(radians(longitude_final) - radians(longitude_inicial)) + 
            sin(radians(latitude_inicial)) * 
            sin(radians(latitude_final))
        )
    ) as media_km_calculado
FROM viagens 
WHERE km_gps_final IS NULL 
AND latitude_inicial IS NOT NULL 
AND longitude_inicial IS NOT NULL
AND latitude_final IS NOT NULL 
AND longitude_final IS NOT NULL
AND data_inicio >= '2024-01-01';

-- 3. APLICAR CORREÇÃO EM TODAS AS VIAGENS COM PROBLEMA
UPDATE viagens 
SET 
    km_gps_final = ROUND(
        6371 * acos(
            cos(radians(latitude_inicial)) * 
            cos(radians(latitude_final)) * 
            cos(radians(longitude_final) - radians(longitude_inicial)) + 
            sin(radians(latitude_inicial)) * 
            sin(radians(latitude_final))
        ), 3
    ),
    observacoes = CONCAT(
        COALESCE(observacoes, ''), 
        ' | KM GPS corrigido automaticamente em ', NOW(), 
        ' - Distância: ', 
        ROUND(
            6371 * acos(
                cos(radians(latitude_inicial)) * 
                cos(radians(latitude_final)) * 
                cos(radians(longitude_final) - radians(longitude_inicial)) + 
                sin(radians(latitude_inicial)) * 
                sin(radians(latitude_final))
            ), 3
        ), ' km'
    )
WHERE km_gps_final IS NULL 
AND latitude_inicial IS NOT NULL 
AND longitude_inicial IS NOT NULL
AND latitude_final IS NOT NULL 
AND longitude_final IS NOT NULL
AND data_inicio >= '2024-01-01';

-- 4. VERIFICAR RESULTADO DA CORREÇÃO
SELECT 
    COUNT(*) as viagens_corrigidas
FROM viagens 
WHERE observacoes LIKE '%KM GPS corrigido automaticamente%'
AND DATE(updated_at) = CURDATE();

-- 5. VERIFICAR VIAGEM 151 ESPECIFICAMENTE
SELECT 
    id, cliente, 
    km_inicial, km_final, km_gps_final,
    data_inicio, data_fim,
    observacoes
FROM viagens 
WHERE id = 151;

-- 6. ESTATÍSTICAS APÓS CORREÇÃO
SELECT 
    COUNT(*) as total_viagens_2024,
    COUNT(CASE WHEN km_gps_final IS NOT NULL THEN 1 END) as com_km_gps,
    COUNT(CASE WHEN km_gps_final IS NULL AND latitude_final IS NOT NULL THEN 1 END) as ainda_com_problema,
    ROUND(
        COUNT(CASE WHEN km_gps_final IS NOT NULL THEN 1 END) * 100.0 / COUNT(*), 
        2
    ) as percentual_correto,
    MIN(km_gps_final) as menor_km_gps,
    MAX(km_gps_final) as maior_km_gps,
    AVG(km_gps_final) as media_km_gps
FROM viagens 
WHERE data_inicio >= '2024-01-01';

-- 7. LISTAR ÚLTIMAS 10 VIAGENS CORRIGIDAS
SELECT 
    id, cliente, veiculo_id,
    km_inicial, km_final, km_gps_final,
    data_inicio, data_fim,
    CASE 
        WHEN finalizada = 1 THEN '✅ FINALIZADA'
        WHEN ativo = 1 THEN '🔄 ATIVA'
        ELSE '⚪ PARADA'
    END as status
FROM viagens 
WHERE km_gps_final IS NOT NULL
AND data_inicio >= '2024-01-01'
ORDER BY data_inicio DESC 
LIMIT 10;

-- ===================================================================
-- RESULTADOS ESPERADOS:
-- ✅ Viagem 151: km_gps_final = ~0.005 km
-- ✅ Todas as viagens com coordenadas: KM GPS calculado
-- ✅ Campo observacoes: Registro da correção automática
-- ✅ Percentual de viagens com KM GPS: próximo a 100%
-- =================================================================== 