<?php
/**
 * TESTE DE LOGIN DE GESTORES - DEBUG COMPLETO
 * Para diagnosticar problemas de login no app móvel
 */

header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type');

if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    exit(0);
}

echo "<!DOCTYPE html>\n";
echo "<html><head><title>Teste Login Gestores</title>";
echo "<style>body{font-family:Arial;margin:20px;} .success{color:green;} .error{color:red;} .info{color:blue;} pre{background:#f5f5f5;padding:10px;border-radius:5px;}</style>";
echo "</head><body>\n";

echo "<h1>🔍 Diagnóstico de Login de Gestores</h1>\n";

// 1. Testar conexão com banco
echo "<h2>1️⃣ Teste de Conexão</h2>\n";

try {
    require_once __DIR__ . '/config/database.php';
    $pdo = conectarBanco();
    echo "<p class='success'>✅ Conexão com banco estabelecida</p>\n";
} catch (Exception $e) {
    echo "<p class='error'>❌ Erro de conexão: " . htmlspecialchars($e->getMessage()) . "</p>\n";
    echo "</body></html>";
    exit();
}

// 2. Verificar se tabela gestores existe
echo "<h2>2️⃣ Verificação da Tabela</h2>\n";

try {
    $stmt = $pdo->query("DESCRIBE gestores");
    $campos = $stmt->fetchAll(PDO::FETCH_ASSOC);
    echo "<p class='success'>✅ Tabela 'gestores' existe</p>\n";
    echo "<details><summary>Estrutura da tabela</summary><pre>\n";
    foreach ($campos as $campo) {
        echo "• {$campo['Field']} ({$campo['Type']}) - {$campo['Null']}\n";
    }
    echo "</pre></details>\n";
} catch (Exception $e) {
    echo "<p class='error'>❌ Tabela 'gestores' não existe ou erro: " . htmlspecialchars($e->getMessage()) . "</p>\n";
    
    // Criar tabela automaticamente
    echo "<p class='info'>🔧 Criando tabela automaticamente...</p>\n";
    try {
        $createSql = "CREATE TABLE IF NOT EXISTS gestores (
            id INT AUTO_INCREMENT PRIMARY KEY,
            nome VARCHAR(100) NOT NULL,
            email VARCHAR(100) UNIQUE NOT NULL,
            usuario VARCHAR(50) UNIQUE NOT NULL,
            senha VARCHAR(255) NOT NULL,
            nivel_acesso ENUM('gestor', 'admin', 'supervisor') NOT NULL DEFAULT 'gestor',
            telefone VARCHAR(20),
            departamento VARCHAR(100),
            foto TEXT,
            status ENUM('ativo', 'inativo', 'bloqueado') NOT NULL DEFAULT 'ativo',
            data_criacao TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
            data_ultimo_acesso TIMESTAMP NULL,
            criado_por INT,
            observacoes TEXT,
            INDEX idx_usuario (usuario),
            INDEX idx_email (email),
            INDEX idx_status (status)
        )";
        
        $pdo->exec($createSql);
        echo "<p class='success'>✅ Tabela 'gestores' criada com sucesso</p>\n";
    } catch (Exception $e2) {
        echo "<p class='error'>❌ Erro ao criar tabela: " . htmlspecialchars($e2->getMessage()) . "</p>\n";
        echo "</body></html>";
        exit();
    }
}

// 3. Verificar se existem gestores cadastrados
echo "<h2>3️⃣ Gestores Cadastrados</h2>\n";

try {
    $stmt = $pdo->query("SELECT id, nome, usuario, nivel_acesso, status FROM gestores ORDER BY id");
    $gestores = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    if (empty($gestores)) {
        echo "<p class='error'>❌ Nenhum gestor cadastrado</p>\n";
        echo "<p class='info'>🔧 Criando gestor padrão...</p>\n";
        
        // Criar gestor padrão
        $senhaHash = password_hash('admin123', PASSWORD_DEFAULT);
        $insertSql = "INSERT INTO gestores (nome, email, usuario, senha, nivel_acesso, status) 
                      VALUES (?, ?, ?, ?, ?, ?)";
        $stmt = $pdo->prepare($insertSql);
        $stmt->execute([
            'Administrador do Sistema',
            'admin@pinheiroempresas.com.br',
            'admin',
            $senhaHash,
            'admin',
            'ativo'
        ]);
        
        echo "<p class='success'>✅ Gestor 'admin' criado com senha 'admin123'</p>\n";
        
        // Buscar novamente
        $stmt = $pdo->query("SELECT id, nome, usuario, nivel_acesso, status FROM gestores ORDER BY id");
        $gestores = $stmt->fetchAll(PDO::FETCH_ASSOC);
    }
    
    echo "<p class='success'>✅ Gestores encontrados: " . count($gestores) . "</p>\n";
    echo "<table border='1' style='border-collapse:collapse;width:100%;'>\n";
    echo "<tr><th>ID</th><th>Nome</th><th>Usuário</th><th>Nível</th><th>Status</th></tr>\n";
    foreach ($gestores as $gestor) {
        echo "<tr>";
        echo "<td>{$gestor['id']}</td>";
        echo "<td>{$gestor['nome']}</td>";
        echo "<td><strong>{$gestor['usuario']}</strong></td>";
        echo "<td>{$gestor['nivel_acesso']}</td>";
        echo "<td>{$gestor['status']}</td>";
        echo "</tr>\n";
    }
    echo "</table>\n";
    
} catch (Exception $e) {
    echo "<p class='error'>❌ Erro ao buscar gestores: " . htmlspecialchars($e->getMessage()) . "</p>\n";
}

// 4. Testar API de login diretamente
echo "<h2>4️⃣ Teste da API de Login</h2>\n";

// Simular requisição POST
$_SERVER['REQUEST_METHOD'] = 'POST';
$testCredentials = [
    ['usuario' => 'admin', 'senha' => 'admin123'],
    ['usuario' => 'admin', 'senha' => 'senha_errada']
];

foreach ($testCredentials as $index => $cred) {
    echo "<h3>Teste " . ($index + 1) . ": {$cred['usuario']} / {$cred['senha']}</h3>\n";
    
    try {
        // Simular input JSON
        $input = $cred;
        $usuario = $input['usuario'];
        $senha = $input['senha'];
        
        if (empty($usuario) || empty($senha)) {
            throw new Exception('Usuário e senha são obrigatórios');
        }
        
        // Buscar gestor no banco
        $sql = "SELECT id, nome, email, usuario, senha, nivel_acesso, telefone, 
                       departamento, foto, status, data_ultimo_acesso
                FROM gestores 
                WHERE usuario = ? AND status = 'ativo'";
        
        $stmt = $pdo->prepare($sql);
        $stmt->execute([$usuario]);
        $gestor = $stmt->fetch(PDO::FETCH_ASSOC);
        
        if (!$gestor) {
            throw new Exception('Credenciais inválidas - usuário não encontrado');
        }
        
        echo "<p class='info'>📋 Gestor encontrado: {$gestor['nome']}</p>\n";
        
        // Verificar senha
        if (!password_verify($senha, $gestor['senha'])) {
            throw new Exception('Credenciais inválidas - senha incorreta');
        }
        
        // Remover senha do retorno
        unset($gestor['senha']);
        
        // Gerar token JWT simples
        $token = base64_encode(json_encode([
            'id' => $gestor['id'],
            'usuario' => $gestor['usuario'],
            'nivel' => $gestor['nivel_acesso'],
            'exp' => time() + (24 * 60 * 60)
        ]));
        
        $response = [
            'sucesso' => true,
            'gestor' => $gestor,
            'token' => $token,
            'mensagem' => 'Login realizado com sucesso'
        ];
        
        echo "<p class='success'>✅ Login bem-sucedido!</p>\n";
        echo "<details><summary>Resposta JSON</summary><pre>\n";
        echo htmlspecialchars(json_encode($response, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
        echo "</pre></details>\n";
        
    } catch (Exception $e) {
        echo "<p class='error'>❌ Erro: " . htmlspecialchars($e->getMessage()) . "</p>\n";
        
        $errorResponse = [
            'sucesso' => false,
            'erro' => $e->getMessage()
        ];
        
        echo "<details><summary>Resposta de erro JSON</summary><pre>\n";
        echo htmlspecialchars(json_encode($errorResponse, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
        echo "</pre></details>\n";
    }
}

// 5. Instruções para o app
echo "<h2>5️⃣ Instruções para o App</h2>\n";

echo "<div style='background:#e8f5e8;padding:15px;border-radius:5px;'>\n";
echo "<h3>✅ Credenciais de Teste</h3>\n";
echo "<p><strong>Usuário:</strong> admin<br>\n";
echo "<strong>Senha:</strong> admin123</p>\n";

echo "<h3>🔗 URL da API</h3>\n";
echo "<p><code>https://sistemas.pinheiroempresas.com.br/controlefrota/backend-php/api/auth/login-gestor.php</code></p>\n";

echo "<h3>📱 Payload JSON</h3>\n";
echo "<pre>{\n  \"usuario\": \"admin\",\n  \"senha\": \"admin123\"\n}</pre>\n";

echo "<h3>🛠️ Debug no App</h3>\n";
echo "<p>Se ainda houver erro 'null', verifique:</p>\n";
echo "<ul>\n";
echo "<li>🌐 Conectividade de rede</li>\n";
echo "<li>🔒 Certificados SSL</li>\n";
echo "<li>📞 Headers HTTP corretos</li>\n";
echo "<li>🔄 Timeout da requisição</li>\n";
echo "</ul>\n";
echo "</div>\n";

// 6. Criar script de teste para o app
echo "<h2>6️⃣ Teste Direto via HTTP</h2>\n";

echo "<form onsubmit='testarLoginDireto(event)' style='background:#f0f8ff;padding:15px;border-radius:5px;'>\n";
echo "<h3>Testar API em tempo real</h3>\n";
echo "<p>\n";
echo "Usuário: <input type='text' id='testUsuario' value='admin' style='padding:5px;'><br><br>\n";
echo "Senha: <input type='password' id='testSenha' value='admin123' style='padding:5px;'><br><br>\n";
echo "<button type='submit' style='padding:10px 20px;background:#007cba;color:white;border:none;border-radius:5px;'>🧪 Testar Login</button>\n";
echo "</p>\n";
echo "</form>\n";

echo "<div id='resultadoTeste' style='margin-top:15px;'></div>\n";

echo "<script>\n";
echo "async function testarLoginDireto(event) {\n";
echo "    event.preventDefault();\n";
echo "    const usuario = document.getElementById('testUsuario').value;\n";
echo "    const senha = document.getElementById('testSenha').value;\n";
echo "    const resultado = document.getElementById('resultadoTeste');\n";
echo "    \n";
echo "    resultado.innerHTML = '<p style=\"color:blue;\">🔄 Testando...</p>';\n";
echo "    \n";
echo "    try {\n";
echo "        const response = await fetch('/controlefrota/backend-php/api/auth/login-gestor.php', {\n";
echo "            method: 'POST',\n";
echo "            headers: { 'Content-Type': 'application/json' },\n";
echo "            body: JSON.stringify({ usuario, senha })\n";
echo "        });\n";
echo "        \n";
echo "        const data = await response.json();\n";
echo "        \n";
echo "        if (data.sucesso) {\n";
echo "            resultado.innerHTML = '<div style=\"color:green;background:#e8f5e8;padding:10px;border-radius:5px;\"><h4>✅ Sucesso!</h4><pre>' + JSON.stringify(data, null, 2) + '</pre></div>';\n";
echo "        } else {\n";
echo "            resultado.innerHTML = '<div style=\"color:red;background:#ffe8e8;padding:10px;border-radius:5px;\"><h4>❌ Erro</h4><pre>' + JSON.stringify(data, null, 2) + '</pre></div>';\n";
echo "        }\n";
echo "    } catch (error) {\n";
echo "        resultado.innerHTML = '<div style=\"color:red;background:#ffe8e8;padding:10px;border-radius:5px;\"><h4>❌ Erro de Rede</h4><p>' + error.message + '</p></div>';\n";
echo "    }\n";
echo "}\n";
echo "</script>\n";

echo "<hr>\n";
echo "<p style='text-align:center;color:#666;'>🏁 Diagnóstico completo em " . date('Y-m-d H:i:s') . "</p>\n";
echo "</body></html>\n";
?> 
