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

$acao = $_GET['acao'] ?? '';

if (empty($acao)) {
    echo "❌ Erro: Ação não especificada";
    exit;
}

try {
    require_once 'config/database.php';
    $pdo = new PDO($dsn, $username, $password, $options);
    
    switch ($acao) {
        case 'km-gps':
            corrigirKmGpsViagem151($pdo);
            break;
            
        case 'tipo-veiculo':
            corrigirTipoVeiculoCerato($pdo);
            break;
            
        case 'teste-fotos':
            testarSistemaFotos($pdo);
            break;
            
        case 'status-viagem':
            verificarStatusViagem151($pdo);
            break;
            
        case 'corrigir-todas':
            corrigirTodasViagensKmGps($pdo);
            break;
            
        default:
            echo "❌ Erro: Ação '$acao' não reconhecida";
    }
    
} catch (Exception $e) {
    echo "❌ ERRO: " . $e->getMessage();
}

function corrigirKmGpsViagem151($pdo) {
    echo "🔧 CORRIGINDO KM GPS DA VIAGEM 151\n";
    echo "=====================================\n\n";
    
    // 1. Verificar dados atuais
    echo "1. 📊 Dados atuais:\n";
    $stmt = $pdo->prepare("SELECT id, latitude_inicial, longitude_inicial, latitude_final, longitude_final, km_gps_final FROM viagens WHERE id = 151");
    $stmt->execute();
    $viagem = $stmt->fetch(PDO::FETCH_ASSOC);
    
    if (!$viagem) {
        echo "❌ Viagem 151 não encontrada!\n";
        return;
    }
    
    echo "Viagem ID: {$viagem['id']}\n";
    echo "Coordenadas iniciais: {$viagem['latitude_inicial']}, {$viagem['longitude_inicial']}\n";
    echo "Coordenadas finais: {$viagem['latitude_final']}, {$viagem['longitude_final']}\n";
    echo "KM GPS atual: " . ($viagem['km_gps_final'] ?: 'NULL') . "\n\n";
    
    // 2. Calcular distância
    echo "2. 🧮 Calculando distância:\n";
    $lat1 = floatval($viagem['latitude_inicial']);
    $lon1 = floatval($viagem['longitude_inicial']);
    $lat2 = floatval($viagem['latitude_final']);
    $lon2 = floatval($viagem['longitude_final']);
    
    if (!$lat1 || !$lon1 || !$lat2 || !$lon2) {
        echo "❌ Coordenadas inválidas para cálculo!\n";
        return;
    }
    
    // Fórmula de Haversine
    $earthRadius = 6371; // 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));
    $distancia = $earthRadius * $c;
    
    echo "Distância calculada: " . round($distancia, 6) . " km\n\n";
    
    // 3. Aplicar correção
    echo "3. ✅ Aplicando correção:\n";
    $stmt = $pdo->prepare("UPDATE viagens SET km_gps_final = ? WHERE id = 151");
    $sucesso = $stmt->execute([$distancia]);
    
    if ($sucesso) {
        echo "✅ KM GPS atualizado com sucesso!\n";
        
        // 4. Adicionar observação
        $observacao = " | KM GPS corrigido automaticamente em " . date('Y-m-d H:i:s') . " - Distância: " . round($distancia, 3) . " km";
        $stmt = $pdo->prepare("UPDATE viagens SET observacoes = CONCAT(COALESCE(observacoes, ''), ?) WHERE id = 151");
        $stmt->execute([$observacao]);
        
        echo "✅ Observação adicionada ao registro\n\n";
        
        // 5. Verificar resultado
        echo "4. 🎯 Resultado final:\n";
        $stmt = $pdo->prepare("SELECT km_gps_final, observacoes FROM viagens WHERE id = 151");
        $stmt->execute();
        $resultado = $stmt->fetch(PDO::FETCH_ASSOC);
        
        echo "KM GPS final: {$resultado['km_gps_final']} km\n";
        echo "Observações: {$resultado['observacoes']}\n";
        
    } else {
        echo "❌ Falha ao atualizar KM GPS\n";
    }
}

function corrigirTipoVeiculoCerato($pdo) {
    echo "🔧 CORRIGINDO TIPO DO VEÍCULO CERATO\n";
    echo "====================================\n\n";
    
    // 1. Verificar dados atuais
    echo "1. 📊 Dados atuais do veículo ID 6:\n";
    $stmt = $pdo->prepare("SELECT id, modelo, placa, tipo FROM veiculos WHERE id = 6");
    $stmt->execute();
    $veiculo = $stmt->fetch(PDO::FETCH_ASSOC);
    
    if (!$veiculo) {
        echo "❌ Veículo ID 6 não encontrado!\n";
        return;
    }
    
    echo "ID: {$veiculo['id']}\n";
    echo "Modelo: {$veiculo['modelo']}\n";
    echo "Placa: {$veiculo['placa']}\n";
    echo "Tipo atual: {$veiculo['tipo']}\n\n";
    
    // 2. Verificar se é Cerato
    if (stripos($veiculo['modelo'], 'Cerato') === false) {
        echo "⚠️ Aviso: Veículo não é um Cerato. Modelo: {$veiculo['modelo']}\n";
        echo "Continuando mesmo assim...\n\n";
    }
    
    // 3. Aplicar correção
    echo "2. ✅ Aplicando correção:\n";
    $stmt = $pdo->prepare("UPDATE veiculos SET tipo = 'carro' WHERE id = 6");
    $sucesso = $stmt->execute();
    
    if ($sucesso) {
        echo "✅ Tipo do veículo atualizado de '{$veiculo['tipo']}' para 'carro'\n\n";
        
        // 4. Verificar resultado
        echo "3. 🎯 Resultado final:\n";
        $stmt = $pdo->prepare("SELECT id, modelo, placa, tipo FROM veiculos WHERE id = 6");
        $stmt->execute();
        $resultado = $stmt->fetch(PDO::FETCH_ASSOC);
        
        echo "ID: {$resultado['id']}\n";
        echo "Modelo: {$resultado['modelo']}\n";
        echo "Placa: {$resultado['placa']}\n";
        echo "Tipo corrigido: {$resultado['tipo']}\n\n";
        
        echo "✅ Próximos checklists deste veículo serão salvos como 'CARRO'\n";
        
    } else {
        echo "❌ Falha ao atualizar tipo do veículo\n";
    }
}

function testarSistemaFotos($pdo) {
    echo "🧪 TESTE DO SISTEMA DE FOTOS\n";
    echo "============================\n\n";
    
    // 1. Verificar tabela
    echo "1. 📊 Status da tabela checklist_fotos:\n";
    $stmt = $pdo->query("SELECT COUNT(*) as total FROM checklist_fotos");
    $total = $stmt->fetch()['total'];
    echo "Total de fotos existentes: $total\n\n";
    
    // 2. Verificar checklist 123
    echo "2. 📋 Verificar checklist ID 123:\n";
    $stmt = $pdo->prepare("SELECT * FROM checklist_veiculos WHERE id = 123");
    $stmt->execute();
    $checklist = $stmt->fetch(PDO::FETCH_ASSOC);
    
    if ($checklist) {
        echo "✅ Checklist existe - ID: {$checklist['id']}, Viagem: {$checklist['viagem_id']}, Veículo: {$checklist['veiculo_id']}\n\n";
    } else {
        echo "❌ Checklist ID 123 não encontrado!\n";
        return;
    }
    
    // 3. Teste de inserção
    echo "3. 🧪 Teste de inserção manual:\n";
    $fotoTeste = [
        'checklist_id' => 123,
        'item_id' => 'teste_sistema',
        'nome_arquivo' => 'foto_teste_' . time() . '.jpg',
        'caminho_arquivo' => 'uploads/checklist-fotos/2025/01/foto_teste_' . time() . '.jpg',
        'descricao_problema' => 'Teste do sistema de upload de fotos',
        'tamanho_arquivo' => 2048,
        'tipo_mime' => 'image/jpeg'
    ];
    
    $stmt = $pdo->prepare("INSERT INTO checklist_fotos (checklist_id, item_id, nome_arquivo, caminho_arquivo, descricao_problema, tamanho_arquivo, tipo_mime) VALUES (?, ?, ?, ?, ?, ?, ?)");
    
    $sucesso = $stmt->execute([
        $fotoTeste['checklist_id'],
        $fotoTeste['item_id'],
        $fotoTeste['nome_arquivo'],
        $fotoTeste['caminho_arquivo'],
        $fotoTeste['descricao_problema'],
        $fotoTeste['tamanho_arquivo'],
        $fotoTeste['tipo_mime']
    ]);
    
    if ($sucesso) {
        $fotoId = $pdo->lastInsertId();
        echo "✅ Inserção manual funcionou - ID: $fotoId\n";
        
        // Verificar
        $stmt = $pdo->prepare("SELECT * FROM checklist_fotos WHERE id = ?");
        $stmt->execute([$fotoId]);
        $fotoSalva = $stmt->fetch(PDO::FETCH_ASSOC);
        echo "✅ Foto confirmada no banco: {$fotoSalva['nome_arquivo']}\n";
        
        // Limpar
        $pdo->prepare("DELETE FROM checklist_fotos WHERE id = ?")->execute([$fotoId]);
        echo "🧹 Registro de teste removido\n\n";
        
    } else {
        echo "❌ Falha na inserção manual\n";
        echo "Erro: " . implode(', ', $stmt->errorInfo()) . "\n\n";
    }
    
    // 4. Diagnóstico
    echo "4. 🎯 Diagnóstico:\n";
    echo "✅ Tabela checklist_fotos funciona corretamente\n";
    echo "✅ Foreign key para checklist_id funciona\n";
    echo "✅ Inserção manual funciona\n";
    echo "❌ Problema está no processamento da API ou no app\n\n";
    
    echo "📋 PRÓXIMOS PASSOS:\n";
    echo "- Verificar se app Android está enviando array 'fotos' no JSON\n";
    echo "- Verificar se função processarFotos() está sendo chamada\n";
    echo "- Adicionar logs específicos na API de checklist\n";
}

function verificarStatusViagem151($pdo) {
    echo "📊 STATUS ATUAL DA VIAGEM 151\n";
    echo "=============================\n\n";
    
    // 1. Dados da viagem
    echo "1. 🚗 Dados da viagem:\n";
    $stmt = $pdo->prepare("
        SELECT v.*, ve.modelo, ve.tipo as tipo_veiculo_real
        FROM viagens v 
        LEFT JOIN veiculos ve ON v.veiculo_id = ve.id 
        WHERE v.id = 151
    ");
    $stmt->execute();
    $viagem = $stmt->fetch(PDO::FETCH_ASSOC);
    
    if (!$viagem) {
        echo "❌ Viagem 151 não encontrada!\n";
        return;
    }
    
    echo "ID: {$viagem['id']}\n";
    echo "Cliente: {$viagem['cliente']}\n";
    echo "Veículo: {$viagem['veiculo_id']} ({$viagem['modelo']})\n";
    echo "Tipo do veículo: {$viagem['tipo_veiculo_real']}\n";
    echo "KM inicial: {$viagem['km_inicial']}\n";
    echo "KM final: {$viagem['km_final']}\n";
    echo "KM GPS: " . ($viagem['km_gps_final'] ?: 'NULL') . "\n";
    echo "Data início: {$viagem['data_inicio']}\n";
    echo "Data fim: " . ($viagem['data_fim'] ?: 'NULL') . "\n";
    echo "Status: " . ($viagem['data_fim'] ? 'FINALIZADA' : 'EM ANDAMENTO') . "\n\n";
    
    // 2. Checklist da viagem
    echo "2. 📋 Checklist:\n";
    $stmt = $pdo->prepare("SELECT * FROM checklist_veiculos WHERE viagem_id = 151");
    $stmt->execute();
    $checklist = $stmt->fetch(PDO::FETCH_ASSOC);
    
    if ($checklist) {
        echo "✅ Checklist existe:\n";
        echo "ID: {$checklist['id']}\n";
        echo "Tipo registrado: {$checklist['tipo_veiculo']}\n";
        echo "Data: {$checklist['data_hora']}\n";
        
        // Verificar fotos
        $stmt = $pdo->prepare("SELECT COUNT(*) as total FROM checklist_fotos WHERE checklist_id = ?");
        $stmt->execute([$checklist['id']]);
        $totalFotos = $stmt->fetch()['total'];
        echo "Fotos: $totalFotos\n\n";
        
    } else {
        echo "❌ Nenhum checklist encontrado para esta viagem\n\n";
    }
    
    // 3. Resumo de correções
    echo "3. 🎯 Status das correções:\n";
    
    // KM GPS
    if ($viagem['km_gps_final'] && $viagem['km_gps_final'] > 0) {
        echo "✅ KM GPS: CORRIGIDO ({$viagem['km_gps_final']} km)\n";
    } else {
        echo "❌ KM GPS: AINDA NULL/ZERO\n";
    }
    
    // Tipo veículo
    if ($viagem['tipo_veiculo_real'] === 'carro') {
        echo "✅ Tipo veículo: CORRIGIDO (carro)\n";
    } else {
        echo "⚠️ Tipo veículo: {$viagem['tipo_veiculo_real']}\n";
    }
    
    // Checklist tipo
    if ($checklist) {
        if ($checklist['tipo_veiculo'] === 'CARRO') {
            echo "✅ Checklist: Tipo correto (CARRO)\n";
        } else {
            echo "⚠️ Checklist: Ainda {$checklist['tipo_veiculo']} (histórico)\n";
        }
    }
    
    // Fotos
    if (isset($totalFotos) && $totalFotos > 0) {
        echo "✅ Fotos: $totalFotos encontradas\n";
    } else {
        echo "❌ Fotos: Nenhuma encontrada\n";
    }
}

function corrigirTodasViagensKmGps($pdo) {
    echo "⚡ CORRIGIR TODAS VIAGENS COM KM GPS ZERO\n";
    echo "========================================\n\n";
    
    // 1. Encontrar viagens com problema
    echo "1. 🔍 Buscando viagens com KM GPS = NULL/0 mas com coordenadas:\n";
    $stmt = $pdo->query("
        SELECT id, cliente, data_inicio, 
               latitude_inicial, longitude_inicial,
               latitude_final, longitude_final,
               km_gps_final
        FROM viagens 
        WHERE (km_gps_final IS NULL OR km_gps_final = 0)
        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'
        ORDER BY data_inicio DESC
    ");
    
    $viagens = $stmt->fetchAll(PDO::FETCH_ASSOC);
    $total = count($viagens);
    
    echo "Encontradas $total viagens com problema\n\n";
    
    if ($total === 0) {
        echo "✅ Nenhuma viagem precisa de correção!\n";
        return;
    }
    
    // 2. Mostrar primeiras 5 como exemplo
    echo "2. 📋 Primeiras viagens a serem corrigidas:\n";
    for ($i = 0; $i < min(5, $total); $i++) {
        $v = $viagens[$i];
        echo "- ID {$v['id']}: {$v['cliente']} - {$v['data_inicio']}\n";
    }
    echo "\n";
    
    // 3. Processar correções
    echo "3. ⚡ Processando correções:\n";
    $corrigidas = 0;
    $erros = 0;
    
    foreach ($viagens as $viagem) {
        $lat1 = floatval($viagem['latitude_inicial']);
        $lon1 = floatval($viagem['longitude_inicial']);
        $lat2 = floatval($viagem['latitude_final']);
        $lon2 = floatval($viagem['longitude_final']);
        
        // Calcular distância
        $earthRadius = 6371;
        $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));
        $distancia = $earthRadius * $c;
        
        // Atualizar
        $stmt = $pdo->prepare("UPDATE viagens SET km_gps_final = ? WHERE id = ?");
        if ($stmt->execute([$distancia, $viagem['id']])) {
            $corrigidas++;
            if ($corrigidas <= 10) {
                echo "✅ Viagem {$viagem['id']}: " . round($distancia, 3) . " km\n";
            }
        } else {
            $erros++;
        }
    }
    
    if ($corrigidas > 10) {
        echo "... e mais " . ($corrigidas - 10) . " viagens\n";
    }
    
    echo "\n4. 🎯 Resultado final:\n";
    echo "✅ Viagens corrigidas: $corrigidas\n";
    echo "❌ Erros: $erros\n";
    echo "📊 Total processadas: $total\n";
    
    if ($corrigidas > 0) {
        echo "\n✅ Correção em massa concluída com sucesso!\n";
    }
}
?> 
