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

// Configuração correta do banco
$host = 'localhost';
$dbname = 'pinheir3_controle_frotasV1.1';
$username = 'pinheir3_admin';
$password = 'G3r@ld0P!nh3!r0';

try {
    $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    $resultado = [];
    
    // 1. Verificar técnicos únicos nas viagens
    $stmt = $pdo->query("SELECT DISTINCT tecnico_id, COUNT(*) as total_viagens FROM viagens GROUP BY tecnico_id ORDER BY total_viagens DESC");
    $tecnicosViagens = $stmt->fetchAll(PDO::FETCH_ASSOC);
    $resultado['tecnicos_em_viagens'] = $tecnicosViagens;
    
    // 2. Verificar usuários cadastrados (tabela unificada)
    $stmt = $pdo->query("SELECT id, nome, matricula, ativo as status FROM usuarios ORDER BY nome");
    $usuariosCadastrados = $stmt->fetchAll(PDO::FETCH_ASSOC);
    $resultado['usuarios_cadastrados'] = $usuariosCadastrados;
    
    // 3. Verificar motoristas cadastrados (tabela antiga)
    try {
        $stmt = $pdo->query("SELECT id, nome, matricula, status FROM motoristas ORDER BY nome");
        $motoristasCadastrados = $stmt->fetchAll(PDO::FETCH_ASSOC);
        $resultado['motoristas_cadastrados'] = $motoristasCadastrados;
    } catch (Exception $e) {
        $resultado['motoristas_cadastrados'] = [];
        $resultado['erro_motoristas'] = 'Tabela motoristas não encontrada ou inacessível';
    }
    
    // 4. Verificar viagens com técnico não identificado (usando tabela usuarios)
    $stmt = $pdo->query("
        SELECT v.id, v.cliente, v.tecnico_id, v.data_inicio, 
               COALESCE(u.nome, 'NÃO ENCONTRADO') as tecnico_nome
        FROM viagens v
        LEFT JOIN usuarios u ON v.tecnico_id = u.id
        WHERE u.nome IS NULL
        ORDER BY v.data_inicio DESC
        LIMIT 10
    ");
    $viagensSemTecnico = $stmt->fetchAll(PDO::FETCH_ASSOC);
    $resultado['viagens_sem_tecnico'] = $viagensSemTecnico;
    
    // 5. Verificar viagens com técnico identificado corretamente
    $stmt = $pdo->query("
        SELECT v.id, v.cliente, v.tecnico_id, v.data_inicio, 
               u.nome as tecnico_nome
        FROM viagens v
        LEFT JOIN usuarios u ON v.tecnico_id = u.id
        WHERE u.nome IS NOT NULL
        ORDER BY v.data_inicio DESC
        LIMIT 5
    ");
    $viagensComTecnico = $stmt->fetchAll(PDO::FETCH_ASSOC);
    $resultado['viagens_com_tecnico'] = $viagensComTecnico;
    
    // 6. Ação de correção se solicitada
    if (isset($_GET['corrigir']) && $_GET['corrigir'] == 'true') {
        $pdo->beginTransaction();
        
        try {
            // Criar usuário "Administrador" se não existir
            $stmt = $pdo->prepare("SELECT id FROM usuarios WHERE nome = ? OR id = ?");
            $stmt->execute(['Administrador', 'admin']);
            $adminExiste = $stmt->fetch();
            
            if (!$adminExiste) {
                $stmt = $pdo->prepare("INSERT INTO usuarios (id, nome, email, senha, cargo, ativo) VALUES (?, ?, ?, ?, ?, ?)");
                $senhaHash = password_hash('123456', PASSWORD_DEFAULT);
                $stmt->execute(['admin', 'Administrador', 'admin@controle.local', $senhaHash, 'Administrador', 1]);
                $resultado['admin_criado'] = true;
            } else {
                $resultado['admin_ja_existe'] = true;
            }
            
            // Verificar se existem outras discrepâncias para corrigir
            $tecnicosParaCorrigir = [];
            foreach ($tecnicosViagens as $tecnico) {
                $stmt = $pdo->prepare("SELECT id FROM usuarios WHERE id = ? OR nome = ?");
                $stmt->execute([$tecnico['tecnico_id'], $tecnico['tecnico_id']]);
                if (!$stmt->fetch()) {
                    $tecnicosParaCorrigir[] = $tecnico['tecnico_id'];
                }
            }
            
            // Criar usuários faltantes
            foreach ($tecnicosParaCorrigir as $tecnicoId) {
                if (!empty($tecnicoId) && $tecnicoId != 'admin' && $tecnicoId != 'Administrador') {
                    $usuarioId = 'tecnico_' . preg_replace('/[^a-zA-Z0-9]/', '_', $tecnicoId);
                    $email = $usuarioId . '@temp.local';
                    $senhaHash = password_hash('123456', PASSWORD_DEFAULT);
                    
                    $stmt = $pdo->prepare("INSERT IGNORE INTO usuarios (id, nome, email, senha, cargo, ativo) VALUES (?, ?, ?, ?, ?, ?)");
                    $stmt->execute([$usuarioId, $tecnicoId, $email, $senhaHash, 'Técnico', 1]);
                    
                    // Atualizar viagens para usar o novo ID
                    $stmt = $pdo->prepare("UPDATE viagens SET tecnico_id = ? WHERE tecnico_id = ?");
                    $stmt->execute([$usuarioId, $tecnicoId]);
                }
            }
            
            $resultado['tecnicos_criados'] = $tecnicosParaCorrigir;
            
            $pdo->commit();
            $resultado['correcao_sucesso'] = true;
            
        } catch (Exception $e) {
            $pdo->rollback();
            $resultado['erro_correcao'] = $e->getMessage();
        }
    }
    
    // 7. Estatísticas finais
    $stmt = $pdo->query("SELECT COUNT(*) as total FROM viagens");
    $resultado['total_viagens'] = $stmt->fetch()['total'];
    
    $stmt = $pdo->query("SELECT COUNT(*) as total FROM usuarios");
    $resultado['total_usuarios'] = $stmt->fetch()['total'];
    
    // Contar viagens órfãs
    $stmt = $pdo->query("
        SELECT COUNT(*) as total 
        FROM viagens v 
        LEFT JOIN usuarios u ON v.tecnico_id = u.id 
        WHERE u.id IS NULL
    ");
    $resultado['viagens_orfas'] = $stmt->fetch()['total'];
    
    echo json_encode([
        'sucesso' => true,
        'dados' => $resultado
    ], JSON_PRETTY_PRINT);
    
} catch (Exception $e) {
    echo json_encode([
        'sucesso' => false,
        'mensagem' => $e->getMessage()
    ]);
}
?> 
