<?php 
ob_start(); 
session_start();
require_once(__DIR__ . "/../inc/config.inc.php");
require_once(__DIR__ . "/../inc/functions.inc.php");


/* ---------- Kein direkter Zugriff ---------- */
if (empty($_SESSION['2fa_userid'])) {
    header('Location: login.php');
    exit;
}

$error_msg = '';

if ($_SERVER['REQUEST_METHOD'] === 'POST' && !empty($_POST['code'])) {

    $userId   = (int)$_SESSION['2fa_userid'];
    $codeHash = hash('sha256', $_POST['code']);

    // 2FA-Code prüfen
    $stmt = $pdo->prepare("
        SELECT id 
        FROM intern_2fa_codes
        WHERE user_id = :uid
          AND code = :code
          AND expires_at > NOW()
        LIMIT 1
    ");
    $stmt->execute([
        'uid'  => $userId,
        'code' => $codeHash
    ]);

    $row = $stmt->fetch(PDO::FETCH_ASSOC);

    if ($row) {

        // Code löschen (Einmalverwendung)
        $pdo->prepare("DELETE FROM intern_2fa_codes WHERE user_id = :uid")
            ->execute(['uid' => $userId]);

        session_regenerate_id(true);

        $_SESSION['userid']       = $userId;
        $_SESSION['2fa_verified'] = true;
        unset($_SESSION['2fa_userid']);

        /* ---------- Gerät merken ---------- */
        if (!empty($_POST['remember_device'])) {

            $identifier = bin2hex(random_bytes(32));
            $token      = bin2hex(random_bytes(32));

            $pdo->prepare("
                INSERT INTO intern_securitytokens
                (user_id, identifier, securitytoken, expires_at)
                VALUES (:uid, :identifier, :token, :expires)
            ")->execute([
                'uid'        => $userId,
                'identifier' => $identifier,
                'token'      => hash('sha256', $token),
                'expires'    => date('Y-m-d H:i:s', time() + 30 * 24 * 3600)
            ]);

            $opts = [
                'expires'  => time() + 30 * 24 * 3600,
                'path'     => '/',
                'secure'   => true,
                'httponly' => true,
                'samesite' => 'Lax'
            ];

            setcookie('remember_device', $identifier, $opts);
            setcookie('remember_device_token', $token, $opts);
        }

        header('Location: index.php');
        exit;
    }

    $error_msg = 'Falscher oder abgelaufener Code.';
}

include("templates/header.inc.php");
?>

<div class="container small-container-330 form-signin">
    <form action="verify_2fa.php" method="post">
        <h2 class="form-signin-heading">Zwei-Faktor-Authentifizierung</h2>
		
		<p>Die Praxis Creutzburg sichert diesen Zugang mit einer Zwei-Faktor-Authentifizierung ab.<br>
		Sie benötigt neben Ihren Passwort auch den zweiten Faktor: eine zufällig generierte Nummer, die an Ihre E-Mail-Adresse versendet wurde.<br>
		Der zweite Faktor ist 5 Minuten gültig.<br>
		Prüfen Sie bitte jetzt Ihr Postfach und auch Ihren Spam-Ordner auf eine E-Mail von uns und geben Sie hier die sechsstellige Nummer ein.<br></p>
		
        <?php if(!empty($error_msg)) echo $error_msg; ?>
        <label for="inputCode">6-stelliger Code</label>
        <input type="text" name="code" class="form-control" placeholder="Code eingeben" required>
		<br>
        <div class="checkbox">
            <label>
                <input type="checkbox" name="remember_device" value="1"> Dieses Gerät für 30 Tage merken
            </label>
        </div>

        <button class="btn btn-lg btn-primary btn-block" type="submit">Bestätigen</button>
    </form>
</div>

<?php include("templates/footer.inc.php"); ?>
