<?php
// admin/admin_students.php
declare(strict_types=1);

session_start();
require_once __DIR__ . '/../includes/db_connect.php';

/* ===== Хелпери ===== */
function h(?string $s): string { return htmlspecialchars((string)$s, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'); }

/* ===== Доступ ===== */
if (!isset($_SESSION['user_id']) || !in_array($_SESSION['role'] ?? '', ['admin', 'teacher'], true)) {
    header("Location: ../index.php");
    exit();
}

$user_id   = (int)$_SESSION['user_id'];
$full_name = $_SESSION['full_name'] ?? 'Адміністратор';

/* Поточна сторінка для активної вкладки */
$current_file = basename($_SERVER['PHP_SELF'] ?? 'admin_students.php');

/* ===== CSRF ===== */
if (empty($_SESSION['csrf_token'])) {
    $_SESSION['csrf_token'] = bin2hex(random_bytes(16));
}
$CSRF = $_SESSION['csrf_token'];
function csrf_check(?string $token): bool {
    return hash_equals($_SESSION['csrf_token'] ?? '', (string)$token);
}

/* ===== Пошта для активацій ===== */
require_once __DIR__ . '/../includes/PHPMailer/src/PHPMailer.php';
require_once __DIR__ . '/../includes/PHPMailer/src/SMTP.php';
require_once __DIR__ . '/../includes/PHPMailer/src/Exception.php';
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
$config_mail = require __DIR__ . '/../includes/config_mail.php';

/* ===== Flash (PRG) ===== */
function flash_set($k,$v){ $_SESSION['flash'][$k]=$v; }
function flash_get($k){ if(!isset($_SESSION['flash'][$k])) return null; $m=$_SESSION['flash'][$k]; unset($_SESSION['flash'][$k]); return $m; }

/* ===== Хост і посилання на активацію ===== */
$scheme = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https' : 'http';
$host   = $_SERVER['HTTP_HOST'] ?? 'localhost';
function build_activation_link(string $host, string $scheme, string $code): string {
    return $scheme . '://' . $host . '/activate.php?code=' . urlencode($code);
}

/* ===== Надіслати лист активації ===== */
function send_activation_mail(array $cfg, string $toEmail, string $toName, string $link): bool {
    $mail = new PHPMailer(true);
    try {
        $mail->isSMTP();
        $mail->Host       = $cfg['host'];
        $mail->SMTPAuth   = true;
        $mail->Username   = $cfg['username'];
        $mail->Password   = $cfg['password'];
        $mail->SMTPSecure = $cfg['encryption'];
        $mail->Port       = $cfg['port'];

        $mail->CharSet = 'UTF-8';
        $mail->setFrom($cfg['from_email'], $cfg['from_name']);
        $mail->addAddress($toEmail, $toName);

        $mail->isHTML(true);
        $mail->Subject = 'Активація облікового запису';
        $safeName = htmlspecialchars($toName, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
        $safeLink = htmlspecialchars($link, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
        $mail->Body    = '<p>Вітаємо, ' . $safeName . '!</p>'
                       . '<p>Для активації облікового запису перейдіть за посиланням:</p>'
                       . '<p><a href="' . $safeLink . '">' . $safeLink . '</a></p>';
        $mail->AltBody = "Вітаємо, {$toName}!\nПерейдіть для активації: {$link}";
        return $mail->send();
    } catch (Exception $e) {
        return false;
    }
}

/* ===== Сервіс: перевірка/створення колонок активності ===== */
function column_exists(mysqli $conn, string $table, string $column): bool {
    $sql = "SELECT 1
            FROM information_schema.COLUMNS
            WHERE TABLE_SCHEMA = DATABASE()
              AND TABLE_NAME = ?
              AND COLUMN_NAME = ?
            LIMIT 1";
    $st = $conn->prepare($sql);
    if (!$st) return false;
    $st->bind_param('ss', $table, $column);
    $st->execute();
    $st->store_result();
    $ok = $st->num_rows > 0;
    $st->close();
    return $ok;
}
function ensure_column(mysqli $conn, string $table, string $column, string $definition): void {
    if (!column_exists($conn, $table, $column)) {
        $sql = "ALTER TABLE `{$conn->real_escape_string($table)}` ADD COLUMN `{$conn->real_escape_string($column)}` {$definition}";
        @$conn->query($sql);
    }
}
ensure_column($conn, 'users', 'last_login_at', 'DATETIME NULL DEFAULT NULL');

/* ===== Сумісна колація для сортування ПІБ ===== */
function get_column_charset(mysqli $conn, string $table, string $column): ?string {
    $sql = "SELECT CHARACTER_SET_NAME
            FROM information_schema.COLUMNS
            WHERE TABLE_SCHEMA = DATABASE()
              AND TABLE_NAME = ?
              AND COLUMN_NAME = ?
            LIMIT 1";
    $st = $conn->prepare($sql);
    if (!$st) return null;
    $st->bind_param('ss', $table, $column);
    $st->execute();
    $res = $st->get_result();
    $row = $res ? $res->fetch_assoc() : null;
    $st->close();
    return $row['CHARACTER_SET_NAME'] ?? null;
}
function pick_collation_for_charset(mysqli $conn, string $charset): ?string {
    $prefer = [
        'utf8mb4' => ['utf8mb4_ukrainian_ci','utf8mb4_unicode_ci','utf8mb4_general_ci'],
        'utf8'    => ['utf8_ukrainian_ci','utf8_unicode_ci','utf8_general_ci'],
        'ucs2'    => ['ucs2_ukrainian_ci','ucs2_unicode_ci','ucs2_general_ci'],
        'utf16'   => ['utf16_ukrainian_ci','utf16_unicode_ci','utf16_general_ci'],
        'utf32'   => ['utf32_ukrainian_ci','utf32_unicode_ci','utf32_general_ci'],
        'latin1'  => ['latin1_swedish_ci'],
    ];
    $cands = $prefer[$charset] ?? [];
    if (empty($cands)) return null;

    $in = "'" . implode("','", array_map([$conn, 'real_escape_string'], $cands)) . "'";
    $sql = "SELECT COLLATION_NAME
            FROM information_schema.COLLATIONS
            WHERE CHARACTER_SET_NAME = ?
              AND COLLATION_NAME IN ($in)
            ORDER BY FIELD(COLLATION_NAME, $in)
            LIMIT 1";
    $st = $conn->prepare($sql);
    if (!$st) return null;
    $st->bind_param('s', $charset);
    $st->execute();
    $res = $st->get_result();
    $row = $res ? $res->fetch_assoc() : null;
    $st->close();
    return $row['COLLATION_NAME'] ?? null;
}
$fullNameCharset = get_column_charset($conn, 'users', 'full_name');
$ORDER_COLLATION = $fullNameCharset ? pick_collation_for_charset($conn, $fullNameCharset) : null;

/* ===== Список груп ===== */
$groups_query  = "SELECT id, group_name FROM `groups` ORDER BY group_name ASC";
$groups_result = $conn->query($groups_query);

/* ===== Обрана група ===== */
$selected_group_id = isset($_GET['group_id']) ? (int)$_GET['group_id'] : 0;

/* ===== Видалення учня (з CSRF) ===== */
if (isset($_GET['delete_student'], $_GET['student_id']) && $selected_group_id > 0) {
    if (!csrf_check($_GET['csrf'] ?? '')) {
        flash_set('error', 'Невірний CSRF-токен.');
        header("Location: admin_students.php?group_id=" . $selected_group_id);
        exit();
    }

    $delete_student_id = (int)$_GET['student_id'];

    if ($delete_student_id > 0 && $delete_student_id !== $user_id) {
        $conn->begin_transaction();
        try {
            if ($q1 = $conn->prepare("DELETE FROM grades WHERE student_id = ?")) {
                $q1->bind_param("i", $delete_student_id);
                $q1->execute();
                $q1->close();
            }
            if ($q2 = $conn->prepare("DELETE FROM users WHERE id = ? AND role = 'student'")) {
                $q2->bind_param("i", $delete_student_id);
                $q2->execute();
                $q2->close();
            }
            $conn->commit();
            flash_set('success', 'Учня видалено.');
        } catch (Throwable $e) {
            $conn->rollback();
            flash_set('error', 'Не вдалося видалити учня.');
        }
    }
    header("Location: admin_students.php?group_id=" . $selected_group_id);
    exit();
}

/* ===== Додати учня вручну (з CSRF) ===== */
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['manual_add']) && $selected_group_id > 0) {
    if (!csrf_check($_POST['csrf_token'] ?? '')) {
        flash_set('error', 'Невірний CSRF-токен.');
        header("Location: admin_students.php?group_id=".$selected_group_id);
        exit();
    }

    $new_name  = trim($_POST['new_full_name'] ?? '');
    $new_email = trim($_POST['new_email'] ?? '');

    if ($new_name === '') {
        flash_set('error', 'Вкажіть ПІБ учня.');
        header("Location: admin_students.php?group_id=".$selected_group_id);
        exit();
    }

    if ($new_email !== '') {
        if (!filter_var($new_email, FILTER_VALIDATE_EMAIL)) {
            flash_set('error', 'Некоректний email.');
            header("Location: admin_students.php?group_id=".$selected_group_id);
            exit();
        }
        if ($chk = $conn->prepare("SELECT id FROM users WHERE email = ?")) {
            $chk->bind_param("s", $new_email);
            $chk->execute();
            $chk->store_result();
            if ($chk->num_rows > 0) {
                $chk->close();
                flash_set('error', 'Користувач з таким email вже існує.');
                header("Location: admin_students.php?group_id=".$selected_group_id);
                exit();
            }
            $chk->close();
        }
    }

    $plain_pass = bin2hex(random_bytes(4)); // 8 символів
    $hash_pass  = password_hash($plain_pass, PASSWORD_DEFAULT);

    $active = 1;
    $activation_code = null;
    $email_to_store  = $new_email;

    if ($new_email === '') {
        $email_to_store = 'noemail+'.uniqid('', true).'@ej.local';
        $active = 1;
    } else {
        $active = 0;
        $activation_code = bin2hex(random_bytes(16));
    }

    if ($ins = $conn->prepare("INSERT INTO users (full_name, email, password, role, group_id, activation_code, active) VALUES (?, ?, ?, 'student', ?, ?, ?)")) {
        $ins->bind_param("sssisi", $new_name, $email_to_store, $hash_pass, $selected_group_id, $activation_code, $active);
        if ($ins->execute()) {
            $new_user_id = $ins->insert_id;
            $ins->close();

            if ($new_email !== '') {
                $link = build_activation_link($host, $scheme, $activation_code);
                $ok = send_activation_mail($config_mail, $new_email, $new_name, $link);
                if ($ok) {
                    flash_set('success', 'Учня додано. Лист із активацією надіслано на '.$new_email.'.');
                } else {
                    flash_set('error', 'Учня додано, але лист із активацією надіслати не вдалося.');
                }
            } else {
                flash_set('success', 'Учня додано до групи без email. Обліковий запис активний.');
            }
        } else {
            $ins->close();
            flash_set('error', 'Помилка збереження учня.');
        }
    } else {
        flash_set('error', 'Помилка підготовки запиту вставки.');
    }

    header("Location: admin_students.php?group_id=".$selected_group_id);
    exit();
}

/* ===== Повторна активація (з CSRF) ===== */
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['send_activation'], $_POST['student_id']) && $selected_group_id > 0) {
    if (!csrf_check($_POST['csrf_token'] ?? '')) {
        flash_set('error', 'Невірний CSRF-токен.');
        header("Location: admin_students.php?group_id=".$selected_group_id);
        exit();
    }

    $sid = (int)$_POST['student_id'];

    if ($q = $conn->prepare("SELECT id, full_name, email, active, COALESCE(activation_code, '') AS code FROM users WHERE id = ? AND role='student' AND group_id = ?")) {
        $q->bind_param("ii", $sid, $selected_group_id);
        $q->execute();
        $st = $q->get_result()->fetch_assoc();
        $q->close();
    } else {
        $st = null;
    }

    if (!$st) {
        flash_set('error', 'Учня не знайдено.');
        header("Location: admin_students.php?group_id=".$selected_group_id);
        exit();
    }

    if ((int)$st['active'] === 1) {
        flash_set('success', 'Аккаунт вже активовано.');
        header("Location: admin_students.php?group_id=".$selected_group_id);
        exit();
    }

    $ends_with_local = (function_exists('str_ends_with'))
        ? str_ends_with($st['email'], '@ej.local')
        : (substr($st['email'], -8) === '@ej.local');

    if ($st['email'] === '' || $ends_with_local) {
        flash_set('error', 'Немає дійсного email для надсилання активації.');
        header("Location: admin_students.php?group_id=".$selected_group_id);
        exit();


    }

    $code = $st['code'] !== '' ? $st['code'] : bin2hex(random_bytes(16));
    if ($st['code'] === '') {
        if ($u = $conn->prepare("UPDATE users SET activation_code = ? WHERE id = ?")) {
            $u->bind_param("si", $code, $sid);
            $u->execute();
            $u->close();
        }
    }

    $link = build_activation_link($host, $scheme, $code);
    $ok = send_activation_mail($config_mail, $st['email'], $st['full_name'], $link);
    if ($ok) {
        flash_set('success', 'Лист із активацією відправлено на '.$st['email'].'.');
    } else {
        flash_set('error', 'Не вдалося надіслати лист активації.');
    }

    header("Location: admin_students.php?group_id=".$selected_group_id);
    exit();
}

/* ===== Отримання учнів ===== */
$students = [];
if ($selected_group_id > 0) {
    $collateSnippet = $ORDER_COLLATION ? (" COLLATE " . $ORDER_COLLATION . " ") : " ";

    $sql = "
        SELECT 
            u.id,
            u.full_name,
            u.email,
            u.group_id,
            u.active,
            u.last_login_at,
            ROUND(AVG(g.grade), 2) AS avg_grade
        FROM users u
        LEFT JOIN grades g ON g.student_id = u.id
        WHERE u.role = 'student' AND u.group_id = ?
        GROUP BY u.id, u.full_name, u.email, u.group_id, u.active, u.last_login_at
        ORDER BY
            (
              REPLACE(REPLACE(REPLACE(SUBSTRING_INDEX(TRIM(u.full_name), ' ', 1), '’',''), '''',''), '-', '')
            ){$collateSnippet}ASC,
            (
              REPLACE(REPLACE(REPLACE(TRIM(u.full_name), '’',''), '''',''), '-', '')
            ){$collateSnippet}ASC
    ";
    $stmt = $conn->prepare($sql);
    if ($stmt === false) {
        flash_set('error', 'Помилка підготовки запиту списку учнів: '.$conn->error);
    } else {
        $stmt->bind_param("i", $selected_group_id);
        $stmt->execute();
        $res = $stmt->get_result();
        while ($row = $res->fetch_assoc()) {
            $students[] = $row;
        }
        $stmt->close();
    }
}
?>
<!DOCTYPE html>
<html lang="uk">
<head>
    <meta charset="UTF-8">
    <meta name="robots" content="noindex, nofollow">
    <title>Учні — Адмінпанель</title>
    <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
    <link rel="stylesheet" href="../assets/css/style.css">
    <style>
        :root{
            /* палітра КПКІТП (фіолетовий + м’ятний) */
            --mint: #a0e0d0;
            --mint-2:#d9f6ef;
            --plum:#402050;
            --plum-2:#2f173b;

            --bg: var(--mint);
            --card: rgba(255,255,255,.92);
            --text:#2a0f3e;
            --muted: rgba(42,15,62,.72);

            --brand: var(--plum);
            --brand-hover: var(--plum-2);

            --danger:#b42318;
            --danger-hover:#7a1a12;

            --radius:14px;
            --shadow:0 10px 28px rgba(20,20,20,.10);
            --border: rgba(64,32,80,.14);
        }
        *{box-sizing:border-box}
        body{
            margin:0;
            font-family:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,"Noto Sans","Helvetica Neue",Arial;
            background:
                radial-gradient(1200px 600px at 10% -10%, rgba(255,255,255,.55), rgba(255,255,255,0) 60%),
                radial-gradient(900px 520px at 110% 10%, rgba(64,32,80,.12), rgba(64,32,80,0) 55%),
                linear-gradient(180deg, var(--mint) 0%, #c9f2e9 55%, #eefbf8 100%);
            color:var(--text);
        }
        .container{ width:100%; max-width:1000px; padding:16px; margin:0 auto; }
        .card{
            background:var(--card);
            border:1px solid var(--border);
            border-radius:var(--radius);
            box-shadow:var(--shadow);
            padding:18px;
            backdrop-filter: blur(6px);
        }
        h1{ margin:0 0 6px; font-size:22px; text-align:left; }
        .lead{ color:var(--muted); font-size:14px; margin:0 0 12px; }

        /* ===== Tabs (як у admin/dashboard.php) ===== */
        .admin-tabs{
            display:flex;
            gap:10px;
            flex-wrap:wrap;
            align-items:center;
            margin: 2px 0 14px;
        }
        .admin-tabs a{
            display:inline-flex;
            align-items:center;
            justify-content:center;
            gap:8px;
            padding:10px 14px;
            border-radius:999px;
            text-decoration:none;
            font-weight:900;
            font-size:14px;
            color: var(--text);
            background: rgba(67,40,85,.08);
            border: 1px solid rgba(67,40,85,.18);
            box-shadow: 0 10px 22px rgba(67,40,85,.08);
            transition: transform .08s ease, box-shadow .12s ease, background .12s ease, border-color .12s ease;
        }
        .admin-tabs a:hover{
            transform: translateY(-1px);
            background: rgba(160,232,208,.45);
            border-color: rgba(67,40,85,.22);
            box-shadow: 0 14px 28px rgba(67,40,85,.10);
        }
        .admin-tabs a.active{
            color:#fff;
            background: linear-gradient(135deg, var(--plum) 0%, #4b2a61 55%, rgba(160,232,208,.95) 120%);
            border-color: rgba(255,255,255,.22);
            box-shadow: 0 18px 40px rgba(67,40,85,.18);
        }

        .alert{
            border:1px solid var(--border);
            border-left-width:6px;
            padding:12px 14px;
            border-radius:12px;
            margin:10px 0;
            background:rgba(255,255,255,.86);
        }
        .alert.success{ border-left-color:#16a34a; }
        .alert.error{ border-left-color:var(--danger); }

        .controls{ display:grid; gap:8px; margin:10px 0 14px; }
        label{ font-size:14px; font-weight:700; color:var(--text); }
        select{
            width:100%;
            max-width:420px;
            padding:12px 14px;
            border:1px solid rgba(64,32,80,.18);
            border-radius:12px;
            background:rgba(255,255,255,.85);
            font-size:16px;
            color: var(--text);
            outline:none;
        }
        select:focus{
            border-color: rgba(64,32,80,.38);
            box-shadow: 0 0 0 4px rgba(64,32,80,.10);
        }

        .student-list{ display:grid; gap:12px; margin-top:10px; }
        .student{
            background:rgba(255,255,255,.92);
            border:1px solid var(--border);
            border-radius:12px;
            padding:12px;
            box-shadow: 0 10px 22px rgba(20,20,20,.08);
        }
        .rowTop{ display:flex; align-items:center; justify-content:space-between; gap:10px; margin-bottom:6px; }
        .name{ font-weight:800; font-size:16px; line-height:1.25; color: var(--text); }
        .avg{
            font-weight:900;
            font-size:14px;
            padding:6px 10px;
            border-radius:999px;
            background: rgba(64,32,80,.10);
            border:1px solid rgba(64,32,80,.16);
            white-space:nowrap;
            min-width:64px;
            text-align:center;
            color: var(--text);
        }
        .email{ font-size:14px; color:var(--muted); word-break:break-all; margin-bottom:6px; }
        .meta{ font-size:12px; color:var(--muted); margin-bottom:10px; line-height:1.4; }

        .actions{ display:flex; gap:8px; flex-wrap:wrap; }
        .btn{
            display:inline-block;
            text-decoration:none;
            padding:10px 14px;
            border-radius:12px;
            font-weight:800;
            font-size:14px;
            cursor:pointer;
            border:1px solid transparent;
        }
        .btn-primary{ background:var(--brand); color:var(--mint-2); border-color:var(--brand); }
        .btn-primary:hover{ background:var(--brand-hover); border-color:var(--brand-hover); }

        .btn-danger{ background:var(--danger); color:#fff; border-color:var(--danger); }
        .btn-danger:hover{ background:var(--danger-hover); border-color:var(--danger-hover); }

        /* кнопка активації (під нову гамму) */
        .btn-ua{
            background: rgba(64,32,80,.10);
            color: var(--text);
            border-color: rgba(64,32,80,.18);
        }
        .btn-ua:hover{
            background: rgba(64,32,80,.16);
            border-color: rgba(64,32,80,.28);
        }
        .btn-ua:disabled{
            opacity:.60;
            cursor:not-allowed;
            filter:saturate(.2);
        }

        .add-card{
            background:rgba(255,255,255,.92);
            border:1px solid var(--border);
            border-radius:12px;
            padding:12px;
            box-shadow:var(--shadow);
            margin:14px 0;
        }
        .grid{ display:grid; gap:10px; }
        .input{
            width:100%;
            padding:10px 12px;
            border:1px solid rgba(64,32,80,.18);
            border-radius:10px;
            font-size:15px;
            background: rgba(255,255,255,.88);
            color: var(--text);
            outline:none;
        }
        .input:focus{
            border-color: rgba(64,32,80,.38);
            box-shadow: 0 0 0 4px rgba(64,32,80,.10);
        }
        .small{ font-size:12px; color:var(--muted); }

        @media (min-width:768px){
            .card{ padding:22px; }
            h1{ font-size:24px; }
            .student{ padding:14px; }
            .name{ font-size:17px; }
            .avg{ font-size:14px; }
            .grid-2{ grid-template-columns: 1fr 1fr; gap:12px; }
        }
    </style>
    <script>
        function redirectToGroup() {
            var groupId = document.getElementById("group_id").value;
            if (groupId) {
                window.location.href = "admin_students.php?group_id=" + groupId;
            } else {
                window.location.href = "admin_students.php";
            }
        }
    </script>
</head>
<body>

<?php require __DIR__ . '/../includes/header.php'; ?>

<main class="container">

    <?php
    $tabs = [
        ['href' => 'dashboard.php',        'label' => 'Журнали'],
        ['href' => '../journal/group_journal.php', 'label' => 'Управління журналами'],
        ['href' => 'dz/index.php',         'label' => 'Домашнє завдання'],
        ['href' => 'admin_students.php',   'label' => 'Учні'],
        ['href' => 'admin_father.php',     'label' => 'Батьки'],
        ['href' => 'admin_teachers.php',   'label' => 'Вчителі'],
        ['href' => 'admin_system.php',     'label' => 'Система'],
    ];
    ?>
    <nav class="admin-tabs" aria-label="Адмін навігація">
        <?php foreach ($tabs as $t):
            $href = (string)($t['href'] ?? '');
            $label = (string)($t['label'] ?? '');
            $active = (basename($href) === $current_file) ? 'active' : '';
        ?>
            <a class="<?= h($active) ?>" href="<?= h($href) ?>"><?= h($label) ?></a>
        <?php endforeach; ?>
    </nav>

    <section class="card">
        <h1>Вітаємо, <?= htmlspecialchars($full_name, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'); ?>!</h1>
        <p class="lead">Список учнів</p>

        <?php if ($m = flash_get('success')): ?>
            <div class="alert success"><?= htmlspecialchars($m, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'); ?></div>
        <?php endif; ?>
        <?php if ($m = flash_get('error')): ?>
            <div class="alert error"><?= htmlspecialchars($m, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'); ?></div>
        <?php endif; ?>

        <!-- Вибір групи -->
        <div class="controls">
            <label for="group_id">Оберіть групу</label>
            <select name="group_id" id="group_id" onchange="redirectToGroup()">
                <option value="">— Оберіть групу —</option>
                <?php if ($groups_result) while ($group = $groups_result->fetch_assoc()): ?>
                    <option value="<?= (int)$group['id']; ?>" <?= $selected_group_id == $group['id'] ? 'selected' : ''; ?>>
                        <?= htmlspecialchars($group['group_name'], ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'); ?>
                    </option>
                <?php endwhile; ?>
            </select>
        </div>

        <?php if ($selected_group_id > 0): ?>

            <!-- Форма додавання учня вручну -->
            <div class="add-card">
                <form method="post" class="grid grid-2">
                    <input type="hidden" name="manual_add" value="1">
                    <input type="hidden" name="csrf_token" value="<?= htmlspecialchars($CSRF, ENT_QUOTES, 'UTF-8'); ?>">
                    <div class="grid">
                        <label for="new_full_name">ПІБ учня *</label>
                        <input class="input" type="text" id="new_full_name" name="new_full_name" required maxlength="255" placeholder="Прізвище Ім’я По батькові">
                    </div>
                    <div class="grid">
                        <label for="new_email">Email (необов’язково)</label>
                        <input class="input" type="email" id="new_email" name="new_email" maxlength="255" placeholder="name@example.com">
                        <span class="small">Якщо вкажете email — ми надішлемо лист для активації.</span>
                    </div>
                    <div>
                        <button class="btn btn-primary" type="submit">Додати учня</button>
                    </div>
                </form>
            </div>

            <!-- Список учнів -->
            <?php if (!empty($students)): ?>
                <div class="student-list">
                    <?php
                    $i = 1;
                    foreach ($students as $st):
                        $avg = $st['avg_grade'];
                        $avg_text = ($avg === null) ? '—' : number_format((float)$avg, 2);
                        $is_active = (int)$st['active'] === 1;
                    ?>
                    <div class="student">
                        <div class="rowTop">
                            <div class="name">
                                <?= $i++ . '. ' . htmlspecialchars($st['full_name'], ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'); ?>
                            </div>
                            <div class="avg"><?= $avg_text; ?></div>
                        </div>

                        <div class="email">
                            <?= htmlspecialchars($st['email'], ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'); ?>
                        </div>

                        <div class="meta">
                            Останній вхід: <strong><?= htmlspecialchars((function ($dt){ if(!$dt) return '—'; $ts=strtotime($dt); return $ts?date('d.m.Y H:i',$ts):'—'; })($st['last_login_at'] ?? null), ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'); ?></strong>
                        </div>

                        <!-- Кнопка активувати -->
                        <form method="post" style="margin:0 0 10px 0">
                            <input type="hidden" name="send_activation" value="1">
                            <input type="hidden" name="student_id" value="<?= (int)$st['id']; ?>">
                            <input type="hidden" name="csrf_token" value="<?= htmlspecialchars($CSRF, ENT_QUOTES, 'UTF-8'); ?>">
                            <button class="btn btn-ua" type="submit" <?= $is_active ? 'disabled' : ''; ?>>
                                <?= $is_active ? 'Аккаунт активний' : 'Активувати'; ?>
                            </button>
                        </form>

                        <div class="actions">
                            <a class="btn btn-primary" href="edit_user.php?id=<?= (int)$st['id']; ?>">Редагувати</a>
                            <a class="btn btn-danger"
                               href="?delete_student=1&student_id=<?= (int)$st['id']; ?>&group_id=<?= (int)$selected_group_id; ?>&csrf=<?= urlencode($CSRF); ?>"
                               onclick="return confirm('Ви впевнені, що хочете видалити учня <?= addslashes(htmlspecialchars($st['full_name'], ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8')); ?>?');">
                                Видалити
                            </a>
                        </div>
                    </div>
                    <?php endforeach; ?>
                </div>
            <?php else: ?>
                <p>У цій групі немає учнів.</p>
            <?php endif; ?>

        <?php else: ?>
            <p>Будь ласка, оберіть групу для перегляду учнів.</p>
        <?php endif; ?>
    </section>
</main>

<?php require __DIR__ . '/../includes/footer.php'; ?>

</body>
</html>