<?php
/**
 * Script para verificar e corrigir senhas dos usuários
 * Ajuda a identificar problemas de login no app
 */

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

// Configuração do banco
try {
    $pdo = new PDO(
        "mysql:host=localhost;dbname=controle_frotas;charset=utf8mb4", 
        "root", 
        "", 
        [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
    );
} catch (Exception $e) {
    die("Erro na conexão: " . $e->getMessage());
}

?>
<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>🔐 Verificar Senhas dos Usuários</title>
    <style>
        body { font-family: Arial, sans-serif; margin: 20px; background: #f5f5f5; }
        .container { max-width: 900px; margin: 0 auto; }
        .card { background: white; border-radius: 8px; padding: 20px; margin: 15px 0; box-shadow: 0 2px 4px rgba(0,0,0,0.1); }
        .success { background: #e8f5e8; border-left: 4px solid #4CAF50; }
        .warning { background: #fff3cd; border-left: 4px solid #FFC107; }
        .error { background: #f8d7da; border-left: 4px solid #DC3545; }
        .info { background: #d1ecf1; border-left: 4px solid #17A2B8; }
        
        table { width: 100%; border-collapse: collapse; margin: 10px 0; }
        table, th, td { border: 1px solid #ddd; }
        th, td { padding: 8px 12px; text-align: left; }
        th { background: #f8f9fa; font-weight: bold; }
        
        .senha-texto-plano { background: #d4edda; }
        .senha-hash { background: #fff3cd; }
        .senha-bcrypt { background: #f8d7da; }
        
        .btn { 
            display: inline-block; 
            padding: 8px 16px; 
            margin: 5px; 
            background: #007bff; 
            color: white; 
            text-decoration: none; 
            border-radius: 4px; 
            border: none;
            cursor: pointer;
        }
        .btn:hover { background: #0056b3; }
        .btn-warning { background: #ffc107; color: #000; }
        .btn-danger { background: #dc3545; }
        .btn-success { background: #28a745; }
        
        pre { background: #f8f9fa; padding: 10px; border-radius: 4px; overflow-x: auto; }
        
        .problematic { border-left: 3px solid #dc3545; }
    </style>
</head>
<body>

<div class="container">
    <h1>🔐 Verificar Senhas dos Usuários</h1>
    <p>Script para verificar e corrigir problemas de senha que impedem o login no app.</p>

    <?php
    // 1. Listar todos os motoristas e suas senhas
    echo "<div class='card info'>";
    echo "<h3>👥 Todos os Motoristas Cadastrados</h3>";
    
    $stmt = $pdo->query("SELECT id, nome, usuario, matricula, senha, status, created_at FROM motoristas ORDER BY nome");
    $motoristas = $stmt->fetchAll();
    
    if (empty($motoristas)) {
        echo "<p class='error'>❌ Nenhum motorista encontrado no banco!</p>";
    } else {
        echo "<p>Total de motoristas: <strong>" . count($motoristas) . "</strong></p>";
        
        echo "<table>";
        echo "<tr>";
        echo "<th>ID</th><th>Nome</th><th>Usuário</th><th>Matrícula</th>";
        echo "<th>Tipo da Senha</th><th>Senha</th><th>Status</th><th>Ações</th>";
        echo "</tr>";
        
        foreach ($motoristas as $motorista) {
            $id = $motorista['id'];
            $nome = $motorista['nome'];
            $usuario = $motorista['usuario'];
            $matricula = $motorista['matricula'];
            $senha = $motorista['senha'];
            $status = $motorista['status'];
            
            // Analisar tipo da senha
            $tipoSenha = '';
            $classeRow = '';
            $problemas = [];
            
            if (empty($senha)) {
                $tipoSenha = 'VAZIA';
                $classeRow = 'problematic';
                $problemas[] = 'Senha vazia';
            } elseif (strlen($senha) > 50 && (strpos($senha, '$2y$') === 0 || strpos($senha, '$2a$') === 0 || strpos($senha, '$2b$') === 0)) {
                $tipoSenha = 'BCrypt Hash';
                $classeRow = 'senha-bcrypt';
                $problemas[] = 'App não suporta BCrypt adequadamente';
            } elseif (strlen($senha) > 30) {
                $tipoSenha = 'Hash Genérico';
                $classeRow = 'senha-hash';
            } else {
                $tipoSenha = 'Texto Plano';
                $classeRow = 'senha-texto-plano';
            }
            
            // Verificar se usuário e matrícula estão preenchidos
            if (empty($usuario)) $problemas[] = 'Usuário vazio';
            if (empty($matricula)) $problemas[] = 'Matrícula vazia';
            if ($status !== 'ativo') $problemas[] = 'Status inativo';
            
            echo "<tr class='$classeRow'>";
            echo "<td>$id</td>";
            echo "<td>$nome</td>";
            echo "<td>" . ($usuario ?: '<em>vazio</em>') . "</td>";
            echo "<td>" . ($matricula ?: '<em>vazio</em>') . "</td>";
            echo "<td><strong>$tipoSenha</strong></td>";
            echo "<td>";
            
            if (strlen($senha) > 40) {
                echo "<span title='$senha'>" . substr($senha, 0, 20) . "...</span>";
            } else {
                echo $senha ?: '<em>vazia</em>';
            }
            
            echo "</td>";
            echo "<td>$status</td>";
            echo "<td>";
            
            if (!empty($problemas)) {
                echo "<span style='color: red; font-size: 12px;'>";
                echo implode(", ", $problemas);
                echo "</span>";
            } else {
                echo "<span style='color: green;'>✅ OK</span>";
            }
            
            echo "</td>";
            echo "</tr>";
        }
        echo "</table>";
    }
    echo "</div>";
    
    // 2. Verificar usuários com problemas específicos
    echo "<div class='card warning'>";
    echo "<h3>⚠️ Usuários com Problemas para Login</h3>";
    
    $problemUsuarios = [];
    
    foreach ($motoristas as $motorista) {
        $problemas = [];
        
        if (empty($motorista['senha'])) {
            $problemas[] = "Senha vazia";
        }
        
        if (empty($motorista['usuario'])) {
            $problemas[] = "Usuário vazio";
        }
        
        if (strlen($motorista['senha']) > 50 && strpos($motorista['senha'], '$2') === 0) {
            $problemas[] = "Senha em BCrypt (app não suporta adequadamente)";
        }
        
        if ($motorista['status'] !== 'ativo') {
            $problemas[] = "Status inativo: {$motorista['status']}";
        }
        
        if (!empty($problemas)) {
            $problemUsuarios[] = [
                'motorista' => $motorista,
                'problemas' => $problemas
            ];
        }
    }
    
    if (empty($problemUsuarios)) {
        echo "<p class='success'>✅ Nenhum problema encontrado! Todos os usuários devem conseguir fazer login.</p>";
    } else {
        echo "<p class='error'>❌ Encontrados <strong>" . count($problemUsuarios) . "</strong> usuários com problemas:</p>";
        
        foreach ($problemUsuarios as $item) {
            $motorista = $item['motorista'];
            $problemas = $item['problemas'];
            
            echo "<div class='card error'>";
            echo "<h4>👤 {$motorista['nome']} (ID: {$motorista['id']})</h4>";
            echo "<ul>";
            foreach ($problemas as $problema) {
                echo "<li>❌ $problema</li>";
            }
            echo "</ul>";
            
            // Sugestões de correção
            echo "<h5>💡 Sugestões de Correção:</h5>";
            echo "<ul>";
            
            if (empty($motorista['senha'])) {
                echo "<li>Definir uma senha simples como '123456' ou 'admin'</li>";
            }
            
            if (empty($motorista['usuario'])) {
                echo "<li>Definir um nome de usuário único</li>";
            }
            
            if (strlen($motorista['senha']) > 50 && strpos($motorista['senha'], '$2') === 0) {
                echo "<li>Trocar por senha em texto plano temporariamente</li>";
                echo "<li>Ou implementar BCrypt no app Android</li>";
            }
            
            if ($motorista['status'] !== 'ativo') {
                echo "<li>Ativar o usuário (status = 'ativo')</li>";
            }
            
            echo "</ul>";
            echo "</div>";
        }
    }
    echo "</div>";
    
    // 3. Comandos SQL para correções rápidas
    echo "<div class='card info'>";
    echo "<h3>🛠️ Comandos SQL para Correções Rápidas</h3>";
    
    echo "<h4>Para o usuário Thalluan:</h4>";
    echo "<pre>";
    echo "-- Definir senha simples para Thalluan\n";
    echo "UPDATE motoristas SET senha = '1477' WHERE nome LIKE '%Thalluan%';\n\n";
    echo "-- Garantir que está ativo\n";
    echo "UPDATE motoristas SET status = 'ativo' WHERE nome LIKE '%Thalluan%';\n\n";
    echo "-- Verificar dados\n";
    echo "SELECT id, nome, usuario, matricula, senha, status FROM motoristas WHERE nome LIKE '%Thalluan%';";
    echo "</pre>";
    
    echo "<h4>Para todos os usuários com problema de BCrypt:</h4>";
    echo "<pre>";
    echo "-- Trocar senhas BCrypt por senhas simples temporárias\n";
    echo "UPDATE motoristas SET senha = '123456' WHERE LENGTH(senha) > 50 AND senha LIKE '$2%';\n\n";
    echo "-- Ou para senhas específicas por usuário:\n";
    echo "UPDATE motoristas SET senha = 'admin' WHERE usuario = 'admin';\n";
    echo "UPDATE motoristas SET senha = '1477' WHERE matricula = '1477';";
    echo "</pre>";
    
    echo "<h4>Para ativar todos os usuários:</h4>";
    echo "<pre>";
    echo "UPDATE motoristas SET status = 'ativo' WHERE status != 'ativo';";
    echo "</pre>";
    
    echo "</div>";
    
    // 4. Teste de login simulado
    echo "<div class='card info'>";
    echo "<h3>🔍 Teste de Login Simulado</h3>";
    echo "<p>Simular como o app tentaria fazer login:</p>";
    
    $testUsers = ['admin', 'thalluan', '1477', 'Thalluan'];
    $testPasswords = ['admin', '123456', '1477', 'thalluan'];
    
    echo "<table>";
    echo "<tr><th>Usuário Teste</th><th>Senha Teste</th><th>Resultado</th><th>Detalhes</th></tr>";
    
    foreach ($testUsers as $testUser) {
        foreach ($testPasswords as $testPassword) {
            // Buscar usuário no banco
            $stmt = $pdo->prepare("SELECT * FROM motoristas WHERE (usuario = ? OR matricula = ? OR nome = ?) AND status = 'ativo'");
            $stmt->execute([$testUser, $testUser, $testUser]);
            $found = $stmt->fetch();
            
            if ($found) {
                $senhaCorreta = false;
                $detalhes = [];
                
                // Verificar senha
                if (empty($found['senha'])) {
                    $detalhes[] = "Senha vazia no banco";
                } elseif ($testPassword === $found['senha']) {
                    $senhaCorreta = true;
                    $detalhes[] = "Senha em texto plano - OK";
                } elseif (strlen($found['senha']) > 50 && strpos($found['senha'], '$2') === 0) {
                    $detalhes[] = "BCrypt - app não suporta";
                } else {
                    // Tentar hashes comuns
                    $md5 = md5($testPassword);
                    $sha1 = sha1($testPassword);
                    $sha256 = hash('sha256', $testPassword);
                    
                    if ($md5 === $found['senha']) {
                        $senhaCorreta = true;
                        $detalhes[] = "MD5 hash - OK";
                    } elseif ($sha1 === $found['senha']) {
                        $senhaCorreta = true;
                        $detalhes[] = "SHA1 hash - OK";
                    } elseif ($sha256 === $found['senha']) {
                        $senhaCorreta = true;
                        $detalhes[] = "SHA256 hash - OK";
                    } else {
                        $detalhes[] = "Senha não confere";
                    }
                }
                
                $resultado = $senhaCorreta ? "✅ LOGIN OK" : "❌ FALHA";
                $classe = $senhaCorreta ? "success" : "error";
                
            } else {
                $resultado = "❌ USUÁRIO NÃO ENCONTRADO";
                $detalhes = ["Usuário '$testUser' não existe ou está inativo"];
                $classe = "error";
            }
            
            echo "<tr class='$classe'>";
            echo "<td>$testUser</td>";
            echo "<td>$testPassword</td>";
            echo "<td><strong>$resultado</strong></td>";
            echo "<td>" . implode(", ", $detalhes) . "</td>";
            echo "</tr>";
        }
    }
    
    echo "</table>";
    echo "</div>";
    
    ?>
    
    <div class="card success">
        <h3>✅ Próximos Passos</h3>
        <ol>
            <li><strong>Execute os comandos SQL</strong> mostrados acima para corrigir as senhas</li>
            <li><strong>Teste o login no app</strong> após as correções</li>
            <li><strong>Verifique os logs</strong> do app durante o login para mais detalhes</li>
            <li><strong>Considere implementar BCrypt</strong> no app para melhor segurança no futuro</li>
        </ol>
        
        <p><strong>💡 Dica:</strong> Para debug rápido, use senhas simples em texto plano como '123456', 'admin', ou a própria matrícula do usuário.</p>
    </div>

</div>

</body>
</html> 
