<?php
/**
 * recuperar_senha.php
 * Sistema: Selflix Vagas
 */

if (session_status() === PHP_SESSION_NONE) {
    session_start();
}

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

// Se o usuário já está logado, redireciona para a home
if (isset($_SESSION['usuario_logado']) && $_SESSION['usuario_logado'] === true) {
    header("Location: index.php");
    exit();
}

$mensagem_usuario_recuperar = '';
$tipo_mensagem_recuperar = '';

// Gerar token CSRF se não existir
if (empty($_SESSION['csrf_token_recuperar'])) {
    $_SESSION['csrf_token_recuperar'] = bin2hex(random_bytes(32));
}

// Processamento do Formulário
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $posted_token = $_POST['csrf_token'] ?? '';
    
    if (!isset($_SESSION['csrf_token_recuperar']) || !hash_equals($_SESSION['csrf_token_recuperar'], $posted_token)) {
        $mensagem_usuario_recuperar = "Erro de validação de segurança.";
        $tipo_mensagem_recuperar = 'erro';
    } else {
        $login_input = trim($_POST['login_recuperacao'] ?? '');

        if (!empty($login_input) && $pdo) {
            try {
                $usuario_encontrado_info = null;
                $nome_display_usuario = null;

                $tabelas_usuarios = [
                    'Administradores' => ['col_id' => 'id', 'col_identifier' => 'login', 'col_nome' => 'nome'],
                    'Empresas'        => ['col_id' => 'id', 'col_identifier' => 'email', 'col_nome' => 'nome_empresa'],
                    'Candidatos'      => ['col_id' => 'id', 'col_identifier' => 'email', 'col_nome' => 'nome']
                ];

                foreach ($tabelas_usuarios as $tabela_nome => $cols) {
                    $stmt = $pdo->prepare("SELECT `{$cols['col_id']}` AS user_id, `{$cols['col_identifier']}` AS user_email, `{$cols['col_nome']}` AS user_nome_display FROM `{$tabela_nome}` WHERE `{$cols['col_identifier']}` = :login_param LIMIT 1");
                    $stmt->execute([':login_param' => $login_input]);
                    $user_data = $stmt->fetch(PDO::FETCH_ASSOC);

                    if ($user_data) {
                        $usuario_encontrado_info = [
                            'id' => $user_data['user_id'], 
                            'email' => $user_data['user_email'],
                            'tabela' => $tabela_nome, 
                            'login_original' => $login_input
                        ];
                        $nome_display_usuario = $user_data['user_nome_display'];
                        break; 
                    }
                }

                if ($usuario_encontrado_info) {
                    $token_para_link = bin2hex(random_bytes(32));
                    $token_hash_para_db = password_hash($token_para_link, PASSWORD_BCRYPT);
                    $minutos_validade = (int)($_ENV['PASSWORD_RESET_TOKEN_EXPIRY_MINUTES'] ?? 60);
                    $expires_at = (new DateTime())->add(new DateInterval("PT{$minutos_validade}M"))->format('Y-m-d H:i:s');

                    // Invalida antigos e insere novo
                    $pdo->prepare("UPDATE password_resets SET used_at = NOW() WHERE user_login = ? AND used_at IS NULL")->execute([$usuario_encontrado_info['login_original']]);
                    
                    $stmt_ins = $pdo->prepare("INSERT INTO password_resets (user_login, user_table, user_id_fk, token_hash, expires_at) VALUES (?, ?, ?, ?, ?)");
                    $stmt_ins->execute([$usuario_encontrado_info['login_original'], $usuario_encontrado_info['tabela'], $usuario_encontrado_info['id'], $token_hash_para_db, $expires_at]);

                    // Envio de E-mail
                    require_once __DIR__ . '/include/email_template_redefinicao_senha.php';
                    $url_base = rtrim(($_ENV['SITE_URL'] ?? 'http://localhost'), '/');
                    $link_completo = "{$url_base}/redefinir_senha.php?token={$token_para_link}";
                    enviarEmailRedefinicaoSenha($usuario_encontrado_info['email'], $nome_display_usuario, $link_completo, $minutos_validade);
                }

                // Definimos a mensagem de sucesso na SESSÃO para exibi-la na tela de login
                $_SESSION['alerta_login'] = [
                    'tipo' => 'sucesso',
                    'texto' => 'Se o e-mail informado estiver cadastrado, você receberá um link de recuperação em instantes.'
                ];
                
                // REDIRECIONAMENTO PARA O LOGIN
                header("Location: login.php");
                exit();

            } catch (Exception $e) {
                error_log("ERRO: " . $e->getMessage());
                $mensagem_usuario_recuperar = "Ocorreu um erro interno.";
                $tipo_mensagem_recuperar = 'erro';
            }
        }
    }
}
?>
<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Recuperar Senha - <?= htmlspecialchars($_ENV['SITE_NAME'] ?? '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; background-color: #f4f4f4; display: flex; align-items: center; justify-content: center; min-height: 100vh; margin: 0; }
        .container-form { background: white; padding: 30px; border-radius: 10px; box-shadow: 0 0 10px rgba(0,0,0,0.1); width: 100%; max-width: 400px; }
        .logo-container { text-align: center; margin-bottom: 20px; }
        .logo { width: 150px; }
        .mensagem { padding: 10px; border-radius: 5px; margin-bottom: 15px; font-size: 14px; }
        .mensagem.erro { background-color: #f8d7da; color: #721c24; border: 1px solid #f5c6cb; }
        input[type="text"] { width: 100%; padding: 10px; margin: 10px 0; border: 1px solid #ddd; border-radius: 4px; box-sizing: border-box; }
        input[type="submit"] { width: 100%; padding: 12px; background-color: #12929e; color: white; border: none; border-radius: 5px; cursor: pointer; font-weight: bold; }
        .links-uteis { text-align: center; margin-top: 15px; }
        .links-uteis a { color: #12929e; text-decoration: none; font-size: 14px; }
    </style>
</head>
<body>
    <div class="container-form">
        <div class="logo-container">
            <img src="<?= htmlspecialchars(($_ENV['SITE_URL'] ?? '') . '/img/id/selflix_logo.jpg'); ?>" alt="Logo" class="logo">
        </div>

        <h3>Recuperar Acesso</h3>
        <p style="font-size: 14px; color: #555;">Digite seu e-mail ou usuário cadastrado.</p>

        <?php if ($mensagem_usuario_recuperar): ?>
            <div class="mensagem <?= $tipo_mensagem_recuperar ?>">
                <?= htmlspecialchars($mensagem_usuario_recuperar) ?>
            </div>
        <?php endif; ?>

        <form action="<?= htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="POST">
            <input type="hidden" name="csrf_token" value="<?= htmlspecialchars($_SESSION['csrf_token_recuperar'] ?? ''); ?>">
            <label>E-mail ou Login:</label>
            <input type="text" name="login_recuperacao" required placeholder="Digite aqui...">
            <input type="submit" value="Enviar Link de Redefinição">
        </form>
        
        <div class="links-uteis">
            <a href="login.php">Voltar para o Login</a>
        </div>
    </div>
</body>
</html>