<?php
// login.php

// Iniciar a sessão no topo do script
if (session_status() == PHP_SESSION_NONE) {
    session_start();
}

require_once 'conexao.php';
require_once 'env.php';

// ** ADIÇÃO: Defina o domínio base dinamicamente no topo do script **
$protocolo = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http";
$host = $_SERVER['HTTP_HOST'];
$site_url = $protocolo . "://" . $host;
// --- FIM DA ADIÇÃO ---

// Função para redirecionar com base no papel do usuário
function redirecionarUsuarioPeloRole($role_usuario) {
    $role_normalizada = strtolower($role_usuario);
    if ($role_normalizada === 'administradores' || $role_normalizada === 'administrador') {
        header("Location: painel-adm.php");
    } elseif ($role_normalizada === 'candidatos') {
        header("Location: painel-de-gestao-candidato.php");
    } elseif ($role_normalizada === 'empresas') {
        header("Location: painel-de-gestao-empresa.php");
    } else {
        error_log("Tentativa de redirecionamento com role desconhecida: " . $role_usuario);
        header("Location: index.php");
    }
    exit();
}

// Se o usuário já está logado, redireciona
if (isset($_SESSION['usuario_logado']) && $_SESSION['usuario_logado'] === true && isset($_SESSION['role'])) {
    if (isset($_SESSION['login_requer_redefinicao']) && $_SESSION['login_requer_redefinicao'] === true) {
        header("Location: recuperar_senha.php?message=" . urlencode("Por favor, redefina sua senha para continuar."));
        exit();
    }
    redirecionarUsuarioPeloRole($_SESSION['role']);
}

// Gerar token CSRF para o formulário
if (empty($_SESSION['csrf_token_login'])) {
    $_SESSION['csrf_token_login'] = bin2hex(random_bytes(32));
}

$erro_login = '';

// Processamento do formulário de login
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (!isset($_POST['csrf_token']) || !isset($_SESSION['csrf_token_login']) || !hash_equals($_SESSION['csrf_token_login'], $_POST['csrf_token'])) {
        $erro_login = "Erro de validação de segurança. Por favor, tente novamente.";
    } else {
        unset($_SESSION['csrf_token_login']);
        $login_input = trim($_POST['login'] ?? '');
        $senha_input = $_POST['senha'] ?? '';

        if (empty($login_input) || empty($senha_input)) {
            $erro_login = "Por favor, preencha todos os campos.";
        } else {
            if (!$pdo) {
                $erro_login = "Erro crítico de sistema. Tente novamente mais tarde.";
                error_log("Login.php: Falha - Conexão PDO não disponível.");
            } else {
                $max_tentativas = (int)($_ENV['LOGIN_MAX_ATTEMPTS'] ?? 5);
                $minutos_bloqueio = (int)($_ENV['LOGIN_LOCKOUT_MINUTES'] ?? 15);

                if (verificarLimiteTentativas($pdo, $login_input, $max_tentativas, $minutos_bloqueio)) {
                    $erro_login = "Muitas tentativas de login falharam. Sua conta foi temporariamente bloqueada por {$minutos_bloqueio} minutos.";
                } else {
                    try {
                        $usuario_encontrado = null;
                        $role_do_usuario = null;
                        $nome_para_sessao = null;
                        $tabela_usuario_encontrado = null;

                        $tabelas_usuarios = [
                            'Administradores' => ['col_nome' => 'nome', 'col_role' => 'role'],
                            'Empresas' => ['col_nome' => 'nome_empresa', 'col_role' => 'role'],
                            'Candidatos' => ['col_nome' => 'nome', 'col_role' => 'role']
                        ];

                        foreach ($tabelas_usuarios as $tabela_nome => $cols) {
                            $stmt_login = $pdo->prepare("SELECT id, login, senha, `{$cols['col_nome']}` AS nome_display, `{$cols['col_role']}` AS role_db FROM `{$tabela_nome}` WHERE login = :login_param LIMIT 1");
                            $stmt_login->bindParam(':login_param', $login_input);
                            $stmt_login->execute();
                            $usuario_encontrado = $stmt_login->fetch(PDO::FETCH_ASSOC);

                            if ($usuario_encontrado) {
                                $role_do_usuario = $usuario_encontrado['role_db'];
                                $nome_para_sessao = $usuario_encontrado['nome_display'];
                                $tabela_usuario_encontrado = $tabela_nome;
                                break;
                            }
                        }

                        if ($usuario_encontrado) {
                            $senha_correta = false;
                            if (isset($usuario_encontrado['senha'])) {
                                $hash_info = password_get_info($usuario_encontrado['senha']);
                                if ($hash_info['algo'] === 0 || $hash_info['algo'] === null) {
                                    if ($senha_input === $usuario_encontrado['senha']) {
                                        $senha_correta = true;
                                        $novo_hash = password_hash($senha_input, PASSWORD_BCRYPT);
                                        $stmt_update_senha = $pdo->prepare("UPDATE `{$tabela_usuario_encontrado}` SET senha = :nova_senha WHERE id = :id_usuario");
                                        $stmt_update_senha->execute([':nova_senha' => $novo_hash, ':id_usuario' => $usuario_encontrado['id']]);
                                        error_log("Senha em texto plano atualizada para hash para o usuário ID {$usuario_encontrado['id']} na tabela {$tabela_usuario_encontrado}.");
                                    }
                                } else {
                                    $senha_correta = password_verify($senha_input, $usuario_encontrado['senha']);
                                }
                            }

                            if ($senha_correta) {
                                $stmt_clear_attempts = $pdo->prepare("DELETE FROM tentativas_login WHERE login = ?");
                                $stmt_clear_attempts->execute([$login_input]);
                                
                                // ** Lógica para redefinição de senha padrão (se aplicável) **
                                if ($senha_input === 'acesse123') {
                                    $_SESSION['login_requer_redefinicao'] = true;
                                    $_SESSION['login_para_redefinicao'] = $login_input;
                                    header("Location: recuperar_senha.php?message=" . urlencode("Sua senha padrão requer redefinição. Por favor, crie uma nova senha para continuar."));
                                    exit();
                                }
                                
                                session_regenerate_id(true);
                                $_SESSION = [];

                                $_SESSION['usuario_logado'] = true;
                                $_SESSION['id'] = $usuario_encontrado['id'];
                                $_SESSION['usuario_nome'] = $nome_para_sessao;
                                $_SESSION['login'] = $usuario_encontrado['login'];
                                $_SESSION['role'] = $role_do_usuario;

                                if ($role_do_usuario === 'Candidatos') {
                                    $_SESSION['id_candidato'] = $usuario_encontrado['id'];
                                }
                                
                                registrarTentativaLogin($pdo, $login_input, true);

                                // ** INÍCIO DA ADIÇÃO: Lógica para exibir o pop-up APENAS para Empresas **
                                if ($role_do_usuario === 'Empresas') {
                                    $_SESSION['mostrar_popup_empresa'] = true;
                                    
                                    // *** GATILHO DE E-MAIL PROTEGIDO ***
                                    try {
                                        $arquivo_notificacao = __DIR__ . '/include/emails-notificacao/logou.php';
                                        if (file_exists($arquivo_notificacao)) {
                                            require_once $arquivo_notificacao;
                                            if (function_exists('enviarNotificacaoLoginEmpresa')) {
                                                enviarNotificacaoLoginEmpresa([
                                                    'nome_empresa' => $nome_para_sessao,
                                                    'email' => $usuario_encontrado['login'],
                                                    'pagina' => 'Formulário de Login'
                                                ]);
                                            }
                                        }
                                    } catch (\Throwable $e) {
                                        // Falha de e-mail isolada silenciosamente
                                        error_log("Erro não-impeditivo no envio de log de acesso: " . $e->getMessage());
                                    }
                                    // *** FIM DO GATILHO DE E-MAIL PROTEGIDO ***
                                }
                                // ** FIM DA ADIÇÃO **

                                $redirect_url_after_login = $_SESSION['redirect_after_login'] ?? null;
                                unset($_SESSION['redirect_after_login']);

                                if (!empty($redirect_url_after_login)) {
                                    $parsed_url = parse_url($redirect_url_after_login);
                                    if (isset($parsed_url['host']) && $parsed_url['host'] !== ($_SERVER['HTTP_HOST'] ?? '')) {
                                        error_log("Tentativa de redirecionamento pós-login para host externo: " . $redirect_url_after_login);
                                        redirecionarUsuarioPeloRole($role_do_usuario);
                                    } else {
                                        header("Location: " . $redirect_url_after_login);
                                        exit();
                                    }
                                } else {
                                    redirecionarUsuarioPeloRole($role_do_usuario);
                                }
                            } else {
                                $erro_login = "Credenciais inválidas.";
                                registrarTentativaLogin($pdo, $login_input, false);
                            }
                        } else {
                            $erro_login = "Usuário não encontrado.";
                        }
                    } catch (PDOException $e) {
                        $erro_login = "Erro interno do sistema durante o login. Tente novamente.";
                        error_log('Erro PDO no login para ' . $login_input . ': ' . $e->getMessage());
                    } catch (Exception $e) {
                        $erro_login = "Ocorreu um erro inesperado. Tente novamente.";
                        error_log('Erro geral no login para ' . $login_input . ': ' . $e->getMessage());
                    }
                }
            }
        }
    }
}

// ** INÍCIO DA ADIÇÃO: Lógica para verificar e limpar a flag do pop-up. **
// Se o pop-up for ser exibido na PRÓXIMA página, esta variável deve ser removida daqui
// e a lógica de exibição deve ser implementada no `painel-de-gestao-empresa.php`.
// Vou assumir que o pop-up DEVE aparecer na PRÓXIMA página (painel-de-gestao-empresa.php),
// e que, portanto, NÃO precisamos de lógica de sessão AQUI nesta página de login.
// A flag `$_SESSION['mostrar_popup_empresa']` foi definida no bloco POST e será lida na página de destino.

// No entanto, se o seu objetivo é que o pop-up apareça ANTES DO LOGIN, isso não é possível
// (o role é conhecido APENAS após o login).
// Vou manter o código do pop-up e modificá-lo para que, **caso o usuário chegue aqui por algum motivo
// com a flag de pop-up ativa na sessão, ele seja exibido (o que é improvável e geralmente não é o caso).**
$mostrar_popup = false;
$role_logado = $_SESSION['role'] ?? null;

// Se o usuário está logado E é uma empresa E a flag está ativa
if (isset($_SESSION['usuario_logado']) && $_SESSION['usuario_logado'] === true && 
    strtolower($role_logado) === 'empresas' && 
    isset($_SESSION['mostrar_popup_empresa']) && $_SESSION['mostrar_popup_empresa'] === true) 
{
    $mostrar_popup = true;
    // Limpar a flag IMEDIATAMENTE após ser lida para evitar re-exibição
    unset($_SESSION['mostrar_popup_empresa']);
    
    // ** NOTA IMPORTANTE: **
    // O código acima é a única maneira de mostrar o pop-up NA PÁGINA DE LOGIN
    // depois que o login é processado, o que exigiria UM SEGUNDO REDIRECIONAMENTO para `login.php?success=true`.
    // O padrão é REDIRECIONAR para a página de destino (`painel-de-gestao-empresa.php`), onde o pop-up será exibido.
    // ** Se o login for bem-sucedido, o usuário será redirecionado e NUNCA verá o HTML abaixo.**
    // ** O código mais seguro é colocar a lógica de pop-up no `painel-de-gestao-empresa.php`. **
    // Vou preparar o HTML/JS para o caso do pop-up ser exibido em `painel-de-gestao-empresa.php`.
}

// ** FIM DA ADIÇÃO **
?>

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Login - Selflix Vagas</title>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css">
    <style>
        body { font-family: Arial, sans-serif; margin: 0; padding: 0; background-color: #f4f4f4; display: flex; flex-direction: column; justify-content: flex-start; align-items: center; min-height: 100vh; box-sizing: border-box; }
        .content-wrapper { display: flex; justify-content: center; align-items: center; flex-grow: 1; width: 100%; padding-top: 20px; padding-bottom: 20px; }
        .container-login { background-color: white; padding: 30px; border: 1px solid #ddd; border-radius: 10px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); width: 100%; max-width: 400px; box-sizing: border-box; }
        @media (max-width: 480px) { .container-login { padding: 20px; width: 90%; margin: 10px; } }
        
        .erro-login { color: red; background-color: #ffe6e6; border: 1px solid #ffb3b3; padding: 10px; border-radius: 5px; margin-bottom: 15px; text-align: center; font-size: 14px; }
        form label { display: block; margin-bottom: 5px; font-weight: bold; color: #555; }
        form input[type="text"], form input[type="email"], form input[type="password"] { width: calc(100% - 22px); margin-bottom: 15px; padding: 10px; border: 1px solid #ddd; border-radius: 4px; font-size: 16px; }
        form input[type="submit"] { background-color: #12929e; color: white; border: none; cursor: pointer; transition: background-color 0.3s; font-weight: bold; padding: 12px; font-size: 16px; border-radius: 5px; }
        form input[type="submit"]:hover { background-color: #0e7a84; }
        .links-uteis { text-align: center; margin-top: 20px; font-size: 14px; }
        .links-uteis a { color: #12929e; text-decoration: none; margin: 0 5px; }
        .links-uteis a:hover { text-decoration: underline; }

        /* Estilos para o Modal */
        .modal {
            display: none;
            position: fixed;
            z-index: 1000;
            left: 0;
            top: 0;
            width: 100%;
            height: 100%;
            overflow: auto;
            background-color: rgba(0,0,0,0.5);
            padding-top: 60px;
        }
        .modal-content {
            background-color: #fefefe;
            margin: 5% auto;
            padding: 20px;
            border: 1px solid #888;
            width: 80%;
            max-width: 500px;
            border-radius: 10px;
            text-align: center;
            animation: fadeIn 0.5s;
        }
        @keyframes fadeIn {
            from {opacity: 0;}
            to {opacity: 1;}
        }
        .close-btn {
            color: #aaa;
            float: right;
            font-size: 28px;
            font-weight: bold;
        }
        .close-btn:hover,
        .close-btn:focus {
            color: black;
            text-decoration: none;
            cursor: pointer;
        }
        .modal-message {
            margin: 20px 0 10px;
            font-size: 1.2em;
            color: #333;
        }
        .modal-subtext {
            font-size: 0.9em;
            color: #555;
            margin-bottom: 15px;
        }
    </style>
</head>
<body>
    <?php include 'menu.php'; ?>
    
    <div class="content-wrapper">
        <div class="container-login">
            
            <?php if (!empty($erro_login)): ?>
                <div class="erro-login"><i class="fas fa-exclamation-triangle"></i> <?php echo htmlspecialchars($erro_login); ?></div>
            <?php endif; ?>

            <form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="POST">
                <input type="hidden" name="csrf_token" value="<?php echo htmlspecialchars($_SESSION['csrf_token_login'] ?? ''); ?>">
                
                <div>
                    <label for="login">E-mail ou Login:</label>
                    <input type="text" id="login" name="login" placeholder="Seu e-mail ou login" required maxlength="100" 
                                    value="<?php echo htmlspecialchars($_POST['login'] ?? ''); ?>">
                </div>
                <div>
                    <label for="senha">Senha:</label>
                    <input type="password" id="senha" name="senha" placeholder="Sua senha" required minlength="6">
                </div>
                <input type="submit" value="Entrar">
            </form>
            
            <div class="links-uteis">
                Ainda não é membro?<p>
                <a href="<?php echo htmlspecialchars($site_url); ?>/cadastro_candidato.php">Cadastre-se como Candidato</a>
                <br>ou<br>
                <a href="<?php echo htmlspecialchars($site_url); ?>/cadastro_empresa.php">Cadastre sua Empresa</a>
                <br><br>
                <a href="<?php echo htmlspecialchars($site_url); ?>/recuperar_senha.php">Esqueceu sua senha?</a>
            </div>
        </div>
    </div>

    <div id="passwordUpdateModal" class="modal">
        <div class="modal-content">
            <span class="close-btn">&times;</span>
            <p class="modal-message">Nosso site foi atualizado, favor realizar nova senha.</p>
            <p class="modal-subtext">Se você já fez isso, por favor, desconsidere esta mensagem.</p>
            <a href="<?php echo htmlspecialchars($site_url); ?>/recuperar_senha.php" class="modal-button" style="display:inline-block; margin-top:10px; background-color:#12929e; color:white; padding:10px 20px; text-decoration:none; border-radius:5px;">Redefinir Senha</a>
        </div>
    </div>
    <?php // include 'rodape.php'; ?> 

    <script>
        document.addEventListener('DOMContentLoaded', function() {
            const modal = document.getElementById('passwordUpdateModal');
            
            // ** INÍCIO DA MUDANÇA: Usar uma variável JS renderizada pelo PHP **
            // O PHP deve ser usado para determinar se o modal deve ser exibido.
            // Para o cenário de pop-up pós-login, o pop-up DEVE ser exibido na página de destino
            // (painel-de-gestao-empresa.php), pois o login redireciona.

            // Vou renderizar o valor da flag PHP apenas para demonstração.
            // No cenário real, essa lógica de exibição deve estar no painel-de-gestao-empresa.php
            // após o login, ou você precisa de um segundo redirecionamento para login.php?show_modal=true
            // o que é mais complexo.
            
            // ** AQUI ESTÁ A LÓGICA CORRETA PARA A PÁGINA DE LOGIN SE O USUÁRIO JÁ ESTIVESSE LOGADO E VOLTASSE (improvável) **
            const mostrarPopupPHP = <?php echo $mostrar_popup ? 'true' : 'false'; ?>;

            if (mostrarPopupPHP) {
                modal.style.display = "block";
            } else {
                // Manter o modal oculto. O código antigo de cookie foi removido.
                modal.style.display = "none";
            }
            // ** FIM DA MUDANÇA **

            const closeBtn = modal.querySelector('.close-btn');

            // Fecha o modal quando o usuário clica no 'x'
            closeBtn.onclick = function() {
                modal.style.display = "none";
            }

            // Fecha o modal quando o usuário clica fora dele
            window.onclick = function(event) {
                if (event.target === modal) {
                    modal.style.display = "none";
                }
            }
        });
    </script>
</body>
</html>