<?php
declare(strict_types=1);

/* ---------------- Безпечні cookie до старту сесії ---------------- */
$secure = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off');
session_set_cookie_params([
    'lifetime' => 0,
    'path'     => '/',
    'domain'   => '',
    'secure'   => $secure,
    'httponly' => true,
    'samesite' => 'Lax',
]);
session_start();

require_once 'includes/db_connect.php';

/* ===== CSRF (для форми з ручним кодом) ===== */
if (empty($_SESSION['csrf_token'])) {
    $_SESSION['csrf_token'] = bin2hex(random_bytes(16));
}
$csrf = $_SESSION['csrf_token'];

$error = null;
$info  = null;
$success = false;

/* ===== Якщо прийшли за посиланням з листа: ?code=... — виконуємо активацію одразу ===== */
$activationCode = trim((string)($_GET['code'] ?? ''));
if ($activationCode !== '') {
    if (!preg_match('/^[A-Fa-f0-9]{32}$/', $activationCode)) {
        $error = "Невірний формат коду активації.";
    } else {
        $sql = "UPDATE users SET active = 1, activation_code = NULL WHERE activation_code = ? AND active = 0";
        if ($stmt = $conn->prepare($sql)) {
            $stmt->bind_param('s', $activationCode);
            if ($stmt->execute() && $stmt->affected_rows === 1) {
                $success = true;
            } else {
                $error = "Недійсний або прострочений код активації.";
            }
            $stmt->close();
        } else {
            $error = "Тимчасова помилка. Спробуйте ще раз.";
        }
    }
}

/* ===== Підтвердження email через ручне введення коду (старий сценарій) ===== */
$MAX_ATTEMPTS = 5;
$COOLDOWN_SEC = 120;
$_SESSION['verify_attempts']    = $_SESSION['verify_attempts']    ?? 0;
$_SESSION['verify_last_failed'] = $_SESSION['verify_last_failed'] ?? 0;

$cooldown_remaining = 0;
if ($_SESSION['verify_attempts'] >= $MAX_ATTEMPTS) {
    $since_last = time() - (int)$_SESSION['verify_last_failed'];
    if ($since_last < $COOLDOWN_SEC) {
        $cooldown_remaining = $COOLDOWN_SEC - $since_last;
    } else {
        $_SESSION['verify_attempts'] = 0;
        $_SESSION['verify_last_failed'] = 0;
    }
}

$email = $_SESSION['email_to_verify'] ?? null;

/* Якщо користувач не зайшов за ?code і немає email у сесії — ведемо на реєстрацію учня */
if ($activationCode === '' && !$email) {
    header("Location: register_student.php");
    exit();
}

if (!$success && $_SERVER['REQUEST_METHOD'] === 'POST' && $activationCode === '') {
    if (!isset($_POST['csrf_token']) || !hash_equals($_SESSION['csrf_token'], (string)$_POST['csrf_token'])) {
        $error = 'Помилка безпеки (CSRF). Оновіть сторінку і спробуйте ще раз.';
    } elseif ($cooldown_remaining > 0) {
        $error = 'Перевищено кількість спроб. Спробуйте через ' . $cooldown_remaining . ' с.';
    } else {
        $entered_code = trim((string)($_POST['verification_code'] ?? ''));
        if ($entered_code === '' || !preg_match('/^[A-Za-z0-9]{4,64}$/', $entered_code)) {
            $error = 'Введіть коректний код підтвердження.';
        } else {
            $sql = "UPDATE users 
                    SET is_verified = 1, verification_code = NULL
                    WHERE email = ? AND is_verified = 0 AND verification_code = ?";
            if ($stmt = $conn->prepare($sql)) {
                $stmt->bind_param("ss", $email, $entered_code);
                if ($stmt->execute() && $stmt->affected_rows === 1) {
                    unset($_SESSION['email_to_verify']);
                    $_SESSION['verify_attempts'] = 0;
                    $_SESSION['verify_last_failed'] = 0;
                    header("Location: login.php?verified=1");
                    exit();
                } else {
                    $error = 'Невірний код підтвердження або користувача вже підтверджено.';
                    $_SESSION['verify_attempts']++;
                    $_SESSION['verify_last_failed'] = time();
                }
                $stmt->close();
            } else {
                $error = 'Помилка підготовки запиту. Спробуйте пізніше.';
            }
        }
    }
}
?>
<!DOCTYPE html>
<html lang="uk">
<head>
    <meta charset="UTF-8">
    <title><?php echo $activationCode !== '' ? 'Активація аккаунта' : 'Підтвердження Email'; ?></title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>
        :root{
            --bg:#f4f4f4; --card:#fff; --text:#333;
            --primary:#007bff; --primary-dark:#0056b3;
            --ok:#2e7d32; --err:#c62828; --muted:#666;
        }
        *{box-sizing:border-box}
        body{font-family:Arial,sans-serif;margin:0;padding:20px;background:var(--bg);min-height:100vh;display:grid;place-items:center;color:var(--text)}
        .box{width:min(480px,92vw);background:var(--card);border-radius:14px;box-shadow:0 8px 24px rgba(0,0,0,.08);padding:20px;text-align:center}
        h1{margin:0 0 12px;font-size:clamp(20px,3.5vw,26px)}
        .lead{color:#555;margin:6px 0 16px}
        .success{color:var(--ok);font-weight:700}
        .error{color:var(--err)}
        label{display:block;text-align:left;font-weight:700;margin:10px 0 6px}
        input[type="text"]{width:100%;padding:12px;border:1px solid #ccc;border-radius:10px;font-size:16px}
        button{width:100%;padding:12px 16px;border:none;border-radius:10px;cursor:pointer;background:var(--primary);color:#fff;font-weight:600;font-size:16px}
        button:hover{background:var(--primary-dark)}
        .muted{color:var(--muted);font-size:13px;margin-top:8px}
        a.btn{display:inline-block;margin-top:14px;padding:10px 14px;background:var(--primary);color:#fff;text-decoration:none;border-radius:10px;font-weight:600}
        a.btn:hover{background:var(--primary-dark)}
        .pill{display:inline-block;padding:6px 10px;border-radius:999px;background:#eef3ff;color:#2c4bff;font-size:12px;font-weight:600}
        .disabled{opacity:.6;pointer-events:none}
    </style>
</head>
<body>
<div class="box">
<?php if ($activationCode !== ''): ?>
    <h1>Активація аккаунта</h1>
    <?php if ($success): ?>
        <p class="success">Ваш аккаунт активовано!</p>
        <p class="lead">Тепер ви можете увійти до системи.</p>
        <a class="btn" href="index.php">Увійти</a>
    <?php else: ?>
        <p class="error"><?php echo htmlspecialchars($error ?? 'Помилка активації.', ENT_QUOTES, 'UTF-8'); ?></p>
        <p class="lead">Перевірте, чи правильно скопійоване посилання з листа.</p>
        <a class="btn" href="index.php">На головну</a>
    <?php endif; ?>
<?php else: ?>
    <h1>Підтвердження Email</h1>
    <p class="lead">Введіть код, надісланий на <strong><?php echo htmlspecialchars((string)$email, ENT_QUOTES, 'UTF-8'); ?></strong>.</p>

    <?php if ($error): ?>
        <p class="error"><?php echo htmlspecialchars($error, ENT_QUOTES, 'UTF-8'); ?></p>
    <?php endif; ?>

    <form action="verify_email.php" method="POST" autocomplete="one-time-code" style="text-align:left">
        <label for="verification_code">Код підтвердження</label>
        <input type="text" id="verification_code" name="verification_code" inputmode="numeric" placeholder="Напр., 123456" required
               <?php echo ($cooldown_remaining > 0) ? 'disabled' : ''; ?>>
        <input type="hidden" name="csrf_token" value="<?php echo htmlspecialchars($csrf, ENT_QUOTES, 'UTF-8'); ?>">
        <div style="margin-top:12px">
            <button type="submit" <?php echo ($cooldown_remaining > 0) ? 'class="disabled"' : ''; ?>>Підтвердити</button>
        </div>
    </form>

    <div style="margin-top:10px">
        <?php if ($cooldown_remaining > 0): ?>
            <span class="pill">Очікуйте: ~<?php echo (int)$cooldown_remaining; ?> с</span>
        <?php else: ?>
            <span class="muted">Не отримали код?</span>
            <a class="btn" href="resend_code.php" style="margin-left:8px">Надіслати ще раз</a>
        <?php endif; ?>
    </div>
<?php endif; ?>
</div>
</body>
</html>
