<?php
// redefinir_senha.php
if (session_status() == PHP_SESSION_NONE) {
    session_start();
}

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

$protocolo = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http";
$host = $_SERVER['HTTP_HOST'];
$site_url = $protocolo . "://" . $host;

$mensagem_usuario_redefinir = '';
$tipo_mensagem_redefinir = '';
$token_valido = false;

// Captura o token (seja via URL no carregamento ou via POST no envio)
$token_from_url = $_GET['token'] ?? $_POST['reset_token'] ?? null;
$reset_info = null;

if (empty($_SESSION['csrf_token_redefinir'])) {
    $_SESSION['csrf_token_redefinir'] = bin2hex(random_bytes(32));
}

if (!$token_from_url) {
    $mensagem_usuario_redefinir = "Nenhum token fornecido.";
    $tipo_mensagem_redefinir = 'erro';
} else {
    // VALIDAÇÃO DO TOKEN (Necessária tanto no carregamento quanto no POST)
    try {
        $stmt_check_token = $pdo->prepare(
            "SELECT id, user_login, user_table, user_id_fk, token_hash, expires_at
             FROM password_resets
             WHERE expires_at > NOW() AND used_at IS NULL"
        );
        $stmt_check_token->execute();
        $possible_tokens = $stmt_check_token->fetchAll(PDO::FETCH_ASSOC);

        foreach ($possible_tokens as $row) {
            if (password_verify($token_from_url, $row['token_hash'])) {
                $reset_info = $row;
                $token_valido = true;
                break;
            }
        }

        if (!$token_valido) {
            $mensagem_usuario_redefinir = "Link inválido ou expirado.";
            $tipo_mensagem_redefinir = 'erro';
        }
    } catch (Exception $e) {
        error_log("Erro na validação: " . $e->getMessage());
    }
}

// PROCESSAMENTO DA TROCA DE SENHA
if ($_SERVER['REQUEST_METHOD'] === 'POST' && $token_valido) {
    $nova_senha = $_POST['nova_senha'] ?? '';
    $confirmar_senha = $_POST['confirmar_senha'] ?? '';
    $csrf_token = $_POST['csrf_token'] ?? '';

    if (!hash_equals($_SESSION['csrf_token_redefinir'] ?? '', $csrf_token)) {
        $mensagem_usuario_redefinir = "Erro de segurança (CSRF).";
        $tipo_mensagem_redefinir = 'erro';
    } elseif ($nova_senha !== $confirmar_senha) {
        $mensagem_usuario_redefinir = "As senhas não coincidem.";
        $tipo_mensagem_redefinir = 'erro';
    } elseif (strlen($nova_senha) < 8) {
        $mensagem_usuario_redefinir = "A senha deve ter no mínimo 8 caracteres.";
        $tipo_mensagem_redefinir = 'erro';
    } else {
        try {
            $pdo->beginTransaction();

            $nova_senha_hash = password_hash($nova_senha, PASSWORD_BCRYPT);
            $user_table = $reset_info['user_table'];
            $user_id = $reset_info['user_id_fk'];

            // Executa o Update na tabela correta
            $sql_update = "UPDATE `{$user_table}` SET `senha` = :hash WHERE `id` = :id";
            $stmt = $pdo->prepare($sql_update);
            $sucesso_update = $stmt->execute([':hash' => $nova_senha_hash, ':id' => $user_id]);

            if ($sucesso_update) {
                // Marca o token como usado
                $stmt_mark = $pdo->prepare("UPDATE password_resets SET used_at = NOW() WHERE id = ?");
                $stmt_mark->execute([$reset_info['id']]);
                
                $pdo->commit();
                unset($_SESSION['csrf_token_redefinir']);

                // PREPARA MENSAGEM PARA O MODAL NO LOGIN E REDIRECIONA
                $_SESSION['alerta_login'] = [
                    'tipo' => 'sucesso',
                    'texto' => 'Sua senha foi alterada com sucesso! Faça login agora.'
                ];
                header("Location: login.php");
                exit();
            } else {
                throw new Exception("Falha ao executar o update no banco.");
            }

        } catch (Exception $e) {
            $pdo->rollBack();
            error_log("Erro ao redefinir: " . $e->getMessage());
            $mensagem_usuario_redefinir = "Erro ao processar. Tente novamente.";
            $tipo_mensagem_redefinir = 'erro';
        }
    }
}
?>
<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Redefinir Senha - Selflix</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; text-align: center; }
        .logo { width: 150px; margin-bottom: 20px; }
        .mensagem { padding: 10px; border-radius: 5px; margin-bottom: 15px; font-size: 14px; border: 1px solid #ddd; }
        .erro { background: #f8d7da; color: #721c24; }
        input[type="password"] { width: 100%; padding: 12px; margin: 10px 0; border: 1px solid #ddd; border-radius: 5px; box-sizing: border-box; }
        input[type="submit"] { width: 100%; padding: 12px; background: #12929e; color: white; border: none; border-radius: 5px; cursor: pointer; font-weight: bold; }
    </style>
</head>
<body>
    <div class="container-form">
        <img src="<?= $site_url ?>/img/id/selflix_logo.jpg" class="logo">
        <h3>Nova Senha</h3>

        <?php if ($mensagem_usuario_redefinir): ?>
            <div class="mensagem <?= $tipo_mensagem_redefinir ?>"><?= $mensagem_usuario_redefinir ?></div>
        <?php endif; ?>

        <?php if ($token_valido): ?>
            <form action="redefinir_senha.php?token=<?= htmlspecialchars($token_from_url) ?>" method="POST">
                <input type="hidden" name="csrf_token" value="<?= $_SESSION['csrf_token_redefinir'] ?>">
                <input type="hidden" name="reset_token" value="<?= htmlspecialchars($token_from_url) ?>">
                
                <input type="password" name="nova_senha" placeholder="Nova Senha" required>
                <input type="password" name="confirmar_senha" placeholder="Confirme a Senha" required>
                
                <input type="submit" value="Salvar Nova Senha">
            </form>
        <?php else: ?>
            <a href="recuperar_senha.php" style="color: #12929e;">Solicitar novo link</a>
        <?php endif; ?>
    </div>
</body>
</html>