<?php
// admin/admin_system.php
declare(strict_types=1);
session_start();
require_once __DIR__ . '/../includes/db_connect.php';
require_once __DIR__ . '/../includes/logger.php';

/* ---------------- Доступ лише для адміна ---------------- */
if (!isset($_SESSION['user_id']) || (($_SESSION['role'] ?? '') !== 'admin')) {
    header("Location: ../index.php");
    exit();
}

$user_id   = (int)($_SESSION['user_id'] ?? 0);
$user_role = (string)($_SESSION['role'] ?? 'admin');

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

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

/**
 * Перевірка наявності колонки в таблиці (MySQL).
 */
function ej_column_exists(mysqli $conn, string $table, string $column, string $dbName = ''): bool {
    $dbName = trim($dbName);
    if ($dbName === '') {
        if ($res = $conn->query("SELECT DATABASE()")) {
            if ($row = $res->fetch_row()) $dbName = (string)($row[0] ?? '');
            $res->free();
        }
    }
    if ($dbName === '') return false;

    $sql = "
        SELECT COUNT(*)
        FROM INFORMATION_SCHEMA.COLUMNS
        WHERE TABLE_SCHEMA = ?
          AND TABLE_NAME   = ?
          AND COLUMN_NAME  = ?
    ";
    $st = $conn->prepare($sql);
    if (!$st) return false;

    $st->bind_param("sss", $dbName, $table, $column);
    $st->execute();
    $st->bind_result($cnt);
    $st->fetch();
    $st->close();

    return (int)$cnt > 0;
}

/* ---------------- Flash (повідомлення) ---------------- */
$error = '';
$success = '';

/* ---------------- Параметри БД для бекапа ---------------- */
$host        = getenv('DB_HOST') ?: 'localhost';
$db_username = getenv('DB_USER') ?: '';
$db_password = getenv('DB_PASS') ?: '';
$db_name     = getenv('DB_NAME') ?: '';

if ($db_name === '' && isset($conn) && $conn instanceof mysqli) {
    if ($res = $conn->query("SELECT DATABASE()")) {
        if ($row = $res->fetch_row()) $db_name = (string)($row[0] ?? '');
        $res->free();
    }
}

/* ---------------- Переконаймося, що таблиця логів є ---------------- */
ej_ensure_user_logs_table($conn);

/* Визначаємо, як називається колонка з кодом дії у user_logs */
$logs_action_col = '';
if (ej_column_exists($conn, 'user_logs', 'action_code', $db_name)) {
    $logs_action_col = 'action_code';
} elseif (ej_column_exists($conn, 'user_logs', 'action', $db_name)) {
    $logs_action_col = 'action';
}

/* ---------------- Експорт log.txt за 31 день ---------------- */
if (isset($_GET['download_log']) && (string)$_GET['download_log'] === '1') {

    // Логуємо факт завантаження
    ej_log_action($conn, $user_id, $user_role, 'logs_download', 'Завантажив log.txt за останні 31 день');

    header('Content-Type: text/plain; charset=UTF-8');
    header('Content-Disposition: attachment; filename="log.txt"');

    $action_select = $logs_action_col !== '' ? ", l.`{$logs_action_col}` AS action_code" : "";

    $sql = "
        SELECT
            l.created_at,
            l.message
            {$action_select},
            INET6_NTOA(l.ip) AS ip_txt,
            l.user_id,
            COALESCE(u.full_name, CONCAT('ID ', l.user_id)) AS user_name
        FROM user_logs l
        LEFT JOIN users u ON u.id = l.user_id
        WHERE l.created_at >= (NOW() - INTERVAL 31 DAY)
        ORDER BY l.created_at ASC, l.id ASC
    ";
    $res = $conn->query($sql);

    echo "Логи за останні 31 день\n";
    echo "=======================\n\n";

    if ($res) {
        while ($row = $res->fetch_assoc()) {
            $dt  = (string)($row['created_at'] ?? '');
            $ip  = (string)($row['ip_txt'] ?? '—');
            $un  = (string)($row['user_name'] ?? '—');
            $msg = (string)($row['message'] ?? '');

            $ac = '';
            if ($logs_action_col !== '') {
                $ac = (string)($row['action_code'] ?? '');
            }

            if ($ac !== '') {
                echo "[{$dt}] {$ip} — {$un} — {$ac} — {$msg}\n";
            } else {
                echo "[{$dt}] {$ip} — {$un} — {$msg}\n";
            }
        }
        $res->free();
    }
    exit();
}

/* ---------------- Лог відкриття сторінки ---------------- */
ej_log_action($conn, $user_id, $user_role, 'admin_system_view', "Відкрив сторінку 'Система'");

/* ---------------- Дії (POST) ---------------- */

/* Бекап БД */
if (($_SERVER['REQUEST_METHOD'] ?? '') === 'POST' && isset($_POST['create_backup'])) {
    $backup_dir = realpath(__DIR__ . '/../backups');
    if ($backup_dir === false) {
        $backup_dir = __DIR__ . '/../backups';
        if (!is_dir($backup_dir)) { @mkdir($backup_dir, 0755, true); }
    }

    $filename = 'backup_' . date('Y-m-d_H-i-s') . '.sql';
    $filepath = rtrim($backup_dir, '/\\') . DIRECTORY_SEPARATOR . $filename;

    if ($db_name === '') {
        $error = "Помилка: не вдалося визначити назву бази даних.";
        ej_log_action($conn, $user_id, $user_role, 'backup_failed', 'Спроба бекапу БД: не вдалося визначити назву бази даних');
    } else {
        $did_dump = false;

        // 1) mysqldump — тільки якщо є логін/пароль у середовищі
        if ($db_username !== '' && $db_password !== '') {
            $mysqldump = '';
            $out_cmdv = []; $rc_cmdv = 1;
            @exec('command -v mysqldump 2>/dev/null', $out_cmdv, $rc_cmdv);
            if ($rc_cmdv === 0 && !empty($out_cmdv[0])) {
                $mysqldump = trim($out_cmdv[0]);
            } elseif (file_exists('/usr/bin/mysqldump')) {
                $mysqldump = '/usr/bin/mysqldump';
            }

            if ($mysqldump) {
                $cmd = "MYSQL_PWD=" . escapeshellarg($db_password)
                     . " " . escapeshellcmd($mysqldump)
                     . " -h " . escapeshellarg($host)
                     . " -u " . escapeshellarg($db_username)
                     . " --single-transaction --routines --events "
                     . escapeshellarg($db_name)
                     . " > " . escapeshellarg($filepath) . " 2>&1";
                $output = []; $return_var = 0;
                @exec($cmd, $output, $return_var);

                if ($return_var === 0 && file_exists($filepath) && filesize($filepath) > 0) {
                    $success = "Дамп бази даних успішно створено: "
                             . "<a href=\"../backups/" . rawurlencode($filename) . "\" download class=\"download-link\">Завантажити</a>";
                    $did_dump = true;
                    ej_log_action($conn, $user_id, $user_role, 'backup_created', "Зробив бекап БД (mysqldump): {$filename}");
                } else {
                    ej_log_action($conn, $user_id, $user_role, 'backup_failed', "Спроба бекапу БД (mysqldump) не вдалася, fallback на PHP: {$filename}");
                }
            } else {
                ej_log_action($conn, $user_id, $user_role, 'backup_failed', "mysqldump недоступний, fallback на PHP: {$filename}");
            }
        } else {
            ej_log_action($conn, $user_id, $user_role, 'backup_failed', "Відсутні DB_USER/DB_PASS в оточенні, fallback на PHP: {$filename}");
        }

        // 2) PHP-дамп, якщо не вдалося через mysqldump
        if (!$did_dump) {
            $mysqli = $conn ?? null;
            if (!$mysqli || $mysqli->connect_error) {
                $error = "Помилка підключення через PHP: " . h($mysqli->connect_error ?? 'невідомо');
                ej_log_action($conn, $user_id, $user_role, 'backup_failed', 'PHP-бекап: помилка підключення до БД');
            } else {
                $dump = "SET NAMES utf8mb4;\nSET FOREIGN_KEY_CHECKS=0;\n\n";
                $tables = $mysqli->query("SHOW TABLES");
                if ($tables) {
                    while ($row = $tables->fetch_array(MYSQLI_NUM)) {
                        $table = $row[0];

                        $dump .= "DROP TABLE IF EXISTS `{$table}`;\n";
                        $create = $mysqli->query("SHOW CREATE TABLE `{$table}`");
                        if ($create) {
                            $create_row = $create->fetch_assoc();
                            $dump .= ($create_row['Create Table'] ?? '') . ";\n\n";
                            $create->free();
                        } else {
                            $error .= "Помилка структури таблиці {$table}: " . $mysqli->error . "\n";
                            continue;
                        }

                        $data = $mysqli->query("SELECT * FROM `{$table}`");
                        if ($data) {
                            while ($r = $data->fetch_assoc()) {
                                $cols = array_map(fn($c) => "`{$c}`", array_keys($r));
                                $vals = array_map(function($v) use ($mysqli) {
                                    if (is_null($v)) return "NULL";
                                    return "'" . $mysqli->real_escape_string((string)$v) . "'";
                                }, array_values($r));
                                $dump .= "INSERT INTO `{$table}` (" . implode(", ", $cols) . ") VALUES (" . implode(", ", $vals) . ");\n";
                            }
                            $dump .= "\n";
                            $data->free();
                        } else {
                            $error .= "Помилка вибірки з таблиці {$table}: " . $mysqli->error . "\n";
                        }
                    }
                    $dump .= "SET FOREIGN_KEY_CHECKS=1;\n";
                    file_put_contents($filepath, $dump);

                    if (file_exists($filepath) && filesize($filepath) > 0) {
                        $success = "Дамп бази даних успішно створено (PHP-метод): "
                                 . "<a href=\"../backups/" . rawurlencode($filename) . "\" download class=\"download-link\">Завантажити</a>";
                        ej_log_action($conn, $user_id, $user_role, 'backup_created', "Зробив бекап БД (PHP): {$filename}");
                    } else {
                        $error = "Створений файл дампа порожній (PHP-метод).";
                        ej_log_action($conn, $user_id, $user_role, 'backup_failed', "PHP-бекап: створений файл порожній ({$filename})");
                    }
                } else {
                    $error = "Не вдалося отримати список таблиць: " . h($mysqli->error);
                    ej_log_action($conn, $user_id, $user_role, 'backup_failed', 'PHP-бекап: не вдалося отримати список таблиць');
                }
            }
        }
    }
}

/* Зміна секретного слова */
if (($_SERVER['REQUEST_METHOD'] ?? '') === 'POST' && isset($_POST['change_secret'])) {
    $new_secret = trim((string)($_POST['new_secret'] ?? ''));
    if ($new_secret === '') {
        $error = "Секретне слово не може бути порожнім!";
        ej_log_action($conn, $user_id, $user_role, 'secret_change_failed', 'Спроба змінити секретне слово: порожнє значення');
    } else {
        $update = $conn->prepare("UPDATE `settings` SET setting_value = ? WHERE setting_name = 'teacher_secret_word'");
        $update->bind_param("s", $new_secret);
        if ($update->execute()) {
            $success = "Секретне слово успішно оновлено!";
            ej_log_action($conn, $user_id, $user_role, 'secret_changed', 'Змінив секретне слово для реєстрації вчителя');
        } else {
            $error = "Помилка при оновленні: " . h($conn->error);
            ej_log_action($conn, $user_id, $user_role, 'secret_change_failed', 'Спроба змінити секретне слово: помилка БД');
        }
        $update->close();
    }
}

/* Очищення застарілих даних (з паролем адміна) */
if (($_SERVER['REQUEST_METHOD'] ?? '') === 'POST' && isset($_POST['clear_old_data'])) {
    $admin_password = (string)($_POST['admin_password'] ?? '');
    $confirm = (string)($_POST['confirm_cleanup'] ?? '');

    if ($confirm !== '1') {
        $error = "Підтвердження не встановлено.";
    } elseif ($admin_password === '') {
        $error = "Введіть пароль адміністратора для підтвердження.";
    } else {
        $hash = '';
        if ($stmt = $conn->prepare("SELECT password FROM users WHERE id = ? AND role='admin' LIMIT 1")) {
            $stmt->bind_param("i", $user_id);
            $stmt->execute();
            $stmt->bind_result($hash);
            $stmt->fetch();
            $stmt->close();
        }

        if (!$hash || !password_verify($admin_password, $hash)) {
            $error = "Невірний пароль адміністратора.";
            ej_log_action($conn, $user_id, $user_role, 'cleanup_failed', 'Спроба очищення застарілих даних: невірний пароль');
        } else {
            $cutoff = date('Y-m-d', strtotime('-1 year'));

            // Рахуємо “скільки буде видалено” (для логів)
            $to_del_lessons = 0;
            $to_del_grades = 0;

            if ($r1 = $conn->prepare("SELECT COUNT(*) FROM lessons WHERE lesson_date < ?")) {
                $r1->bind_param("s", $cutoff);
                $r1->execute();
                $r1->bind_result($to_del_lessons);
                $r1->fetch();
                $r1->close();
            }
            if ($r2 = $conn->prepare("SELECT COUNT(*) FROM grades WHERE lesson_id IN (SELECT id FROM lessons WHERE lesson_date < ?)")) {
                $r2->bind_param("s", $cutoff);
                $r2->execute();
                $r2->bind_result($to_del_grades);
                $r2->fetch();
                $r2->close();
            }

            $del_grades_old = $conn->prepare("DELETE FROM `grades` WHERE lesson_id IN (SELECT id FROM `lessons` WHERE lesson_date < ?)");
            $del_grades_old->bind_param("s", $cutoff);

            $del_grades_orphans = $conn->prepare("DELETE g FROM `grades` g LEFT JOIN `lessons` l ON g.lesson_id = l.id WHERE g.lesson_id IS NOT NULL AND l.id IS NULL");

            $del_lessons_old = $conn->prepare("DELETE FROM `lessons` WHERE lesson_date < ?");
            $del_lessons_old->bind_param("s", $cutoff);

            $ok = $del_grades_old->execute() && $del_grades_orphans->execute() && $del_lessons_old->execute();

            $del_grades_old->close();
            $del_grades_orphans->close();
            $del_lessons_old->close();

            if ($ok) {
                $success = "Застарілі уроки та оцінки (старше року) успішно видалено!";
                ej_log_action(
                    $conn,
                    $user_id,
                    $user_role,
                    'cleanup_success',
                    "Запустив очищення застарілих даних: уроків ~{$to_del_lessons}, оцінок ~{$to_del_grades} (старше року)"
                );
            } else {
                $error = "Помилка при очищенні даних: " . h($conn->error);
                ej_log_action($conn, $user_id, $user_role, 'cleanup_failed', 'Спроба очищення застарілих даних: помилка виконання запитів');
            }
        }
    }
}

/* ---------------- Дані для відображення ---------------- */
$students_total = (int)($conn->query("SELECT COUNT(*) AS c FROM `users` WHERE role='student'")->fetch_assoc()['c'] ?? 0);
$students_registered = (int)($conn->query("SELECT COUNT(*) AS c FROM `users` WHERE role='student' AND email NOT LIKE '%@ej.local%'")->fetch_assoc()['c'] ?? 0);
$subjects_count = (int)($conn->query("SELECT COUNT(*) AS c FROM `subjects`")->fetch_assoc()['c'] ?? 0);
$average_grade  = (float)($conn->query("SELECT AVG(grade) AS a FROM `grades` WHERE grade IS NOT NULL")->fetch_assoc()['a'] ?? 0.0);
$average_grade_fmt = number_format($average_grade, 2);

/* Останні 20 дій */
$action_select = $logs_action_col !== '' ? ", l.`{$logs_action_col}` AS action_code" : "";
$logs_result = $conn->query("
    SELECT
        l.created_at,
        l.message
        {$action_select},
        INET6_NTOA(l.ip) AS ip_txt,
        l.user_id,
        COALESCE(u.full_name, CONCAT('ID ', l.user_id)) AS user_name
    FROM user_logs l
    LEFT JOIN users u ON u.id = l.user_id
    ORDER BY l.created_at DESC, l.id DESC
    LIMIT 20
");

/* ТОП груп: зареєстровані учні (без @ej.local) */
$top_registered = $conn->query("
    SELECT g.group_name, COUNT(*) AS c
    FROM users u
    JOIN `groups` g ON g.id = u.group_id
    WHERE u.role='student'
      AND u.group_id IS NOT NULL
      AND u.email NOT LIKE '%@ej.local%'
    GROUP BY u.group_id
    ORDER BY c DESC, g.group_name ASC
    LIMIT 10
");

/* ТОП груп: активність перегляду оцінок (31 день) */
$top_views = false;
if ($logs_action_col !== '') {
    $top_views = $conn->query("
        SELECT
            g.group_name,
            COUNT(*) AS views,
            COUNT(DISTINCT l.user_id) AS students
        FROM user_logs l
        JOIN users u ON u.id = l.user_id
        JOIN `groups` g ON g.id = u.group_id
        WHERE l.`{$logs_action_col}` = 'grades_view'
          AND l.created_at >= (NOW() - INTERVAL 31 DAY)
          AND u.role='student'
          AND u.group_id IS NOT NULL
        GROUP BY u.group_id
        ORDER BY views DESC, g.group_name ASC
        LIMIT 10
    ");
}

/* ТОП груп: найвища середня оцінка (за весь час) */
$top_avg = $conn->query("
    SELECT
        g.group_name,
        AVG(gr.grade) AS avg_grade,
        COUNT(gr.grade) AS grades_count
    FROM grades gr
    JOIN users u ON u.id = gr.student_id
    JOIN `groups` g ON g.id = u.group_id
    WHERE gr.grade IS NOT NULL
      AND u.role='student'
      AND u.group_id IS NOT NULL
      AND u.email NOT LIKE '%@ej.local%'
    GROUP BY u.group_id
    HAVING COUNT(gr.grade) > 0
    ORDER BY avg_grade DESC, grades_count DESC, g.group_name ASC
    LIMIT 10
");
?>
<!DOCTYPE html>
<html lang="uk">
<head>
    <meta charset="UTF-8">
    <meta name="robots" content="noindex, nofollow">
    <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
    <title>Система — Адмінпанель</title>
    <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);

            --radius:14px;
            --shadow:0 10px 28px rgba(20,20,20,.10);
            --border: rgba(64,32,80,.14);

            --danger:#b42318;
            --danger-hover:#7a1a12;
        }
        *{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:1180px;padding:16px;margin:0 auto}
        .card{
            background:var(--card);
            border-radius:var(--radius);
            box-shadow:var(--shadow);
            padding:18px;
            margin-bottom:16px;
            border:1px solid var(--border);
            backdrop-filter: blur(6px);
        }
        h1{margin:0 0 12px;font-size:22px}
        h2{margin:10px 0 8px;font-size:18px}
        .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);
        }

        .btn{
            display:inline-block;
            text-decoration:none;
            padding:12px 16px;
            border-radius:12px;
            font-weight:800;
            font-size:14px;
            border:0;
            cursor:pointer;
            background:var(--brand);
            color:var(--mint-2);
        }
        .btn:hover{background:var(--brand-hover)}
        .btn-danger{background:var(--danger)}
        .btn-danger:hover{background:var(--danger-hover)}
        .download-link{color:var(--brand);text-decoration:none;font-weight:800}
        .download-link:hover{text-decoration:underline}

        .form-grid{display:grid;gap:10px}
        label{font-size:14px;font-weight:700;color:var(--text)}
        input[type="text"], input[type="password"]{
            width:100%;
            max-width:420px;
            padding:12px 14px;
            border:1px solid rgba(64,32,80,.18);
            border-radius:12px;
            background:rgba(255,255,255,.88);
            font-size:16px;
            color:var(--text);
            outline:none;
        }
        input[type="text"]:focus, input[type="password"]:focus{
            border-color: rgba(64,32,80,.38);
            box-shadow: 0 0 0 4px rgba(64,32,80,.10);
        }

        .table-responsive{width:100%;overflow:auto;border:1px solid var(--border);border-radius:12px;background:rgba(255,255,255,.90)}
        table{width:100%;border-collapse:separate;border-spacing:0}
        th,td{padding:10px 12px;border-bottom:1px solid var(--border);text-align:left;font-size:14px;vertical-align:top}
        th{background:rgba(64,32,80,.06);color:var(--text)}
        tr:nth-child(even) td{background:rgba(255,255,255,.60)}
        tr:hover td{background:rgba(64,32,80,.05)}

        .stats-grid{
            display:grid;
            gap:12px;
            grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
        }
        .stat{
            border:1px solid var(--border);
            border-radius:12px;
            padding:12px;
            background:rgba(255,255,255,.92);
        }
        .stat .k{color:var(--muted);font-size:13px;margin-bottom:6px}
        .stat .v{font-size:22px;font-weight:900}

        .two-col{
            display:grid;
            gap:16px;
            grid-template-columns: 1fr;
        }
        @media (min-width: 980px){
            .two-col{grid-template-columns: 1fr 1fr;}
        }

        .note{
            background: rgba(255,255,255,.86);
            border:1px solid rgba(64,32,80,.18);
            color: var(--text);
            padding:12px;
            border-radius:12px;
            font-weight:800;
            text-align:center;
        }

        .small{font-size:13px;color:var(--muted)}
        .checkrow{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
    </style>
</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>Система</h1>
        <p class="lead">Сторінка доступна лише для адміністраторів.</p>

        <?php if ($error): ?>
            <div class="card" style="background:rgba(180,35,24,.08);border:1px solid rgba(180,35,24,.25);color:#7a1a12"><?= h($error) ?></div>
        <?php endif; ?>
        <?php if ($success): ?>
            <div class="card" style="background:rgba(160,224,208,.35);border:1px solid rgba(64,32,80,.18);color:<?= h('#2a0f3e') ?>"><?= $success ?></div>
        <?php endif; ?>
    </section>

    <!-- Бекап -->
    <section class="card">
        <h2>Створити дамп бази даних</h2>
        <form method="POST" action="">
            <button type="submit" name="create_backup" class="btn">Зробити бекап</button>
        </form>
        <p class="lead">
            Якщо на сервері немає <code>mysqldump</code> або відсутні <code>DB_USER/DB_PASS</code>,
            автоматично використовується PHP-метод.
        </p>
    </section>

    <!-- Секретне слово -->
    <section class="card">
        <h2>Змінити секретне слово</h2>
        <form method="POST" action="" class="form-grid">
            <label for="new_secret">Нове секретне слово</label>
            <input type="text" name="new_secret" id="new_secret" required>
            <button type="submit" name="change_secret" class="btn">Зберегти</button>
        </form>
    </section>

    <!-- Логи -->
    <section class="card">
        <div style="display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex-wrap:wrap">
            <div>
                <h2 style="margin:0 0 6px">Останні дії (20)</h2>
                <div class="small">Показує максимально просто: дата/час, хто, IP, що зробив.</div>
                <?php if ($logs_action_col !== ''): ?>
                    <div class="small">Додатково показується код дії (<?= h($logs_action_col) ?>).</div>
                <?php endif; ?>
            </div>
            <div>
                <a class="btn" href="admin_system.php?download_log=1">Завантажити log.txt (31 день)</a>
            </div>
        </div>

        <?php if ($logs_result && $logs_result->num_rows > 0): ?>
            <div class="table-responsive" style="margin-top:12px">
                <table>
                    <thead>
                        <tr>
                            <th style="width:170px">Дата, час</th>
                            <th style="width:260px">Користувач</th>
                            <th style="width:160px">IP</th>
                            <?php if ($logs_action_col !== ''): ?>
                                <th style="width:170px">Код</th>
                            <?php endif; ?>
                            <th>Що зробив</th>
                        </tr>
                    </thead>
                    <tbody>
                    <?php while ($log = $logs_result->fetch_assoc()): ?>
                        <tr>
                            <td><?= h((string)$log['created_at']) ?></td>
                            <td><?= h((string)$log['user_name']) ?></td>
                            <td><?= h((string)($log['ip_txt'] ?: '—')) ?></td>
                            <?php if ($logs_action_col !== ''): ?>
                                <td><?= h((string)($log['action_code'] ?? '')) ?></td>
                            <?php endif; ?>
                            <td><?= h((string)$log['message']) ?></td>
                        </tr>
                    <?php endwhile; ?>
                    </tbody>
                </table>
            </div>
        <?php else: ?>
            <p class="lead">Логів ще немає.</p>
        <?php endif; ?>
    </section>

    <!-- Статистика -->
    <section class="card">
        <h2>Статистика</h2>

        <div class="stats-grid">
            <div class="stat">
                <div class="k">Учнів (всього)</div>
                <div class="v"><?= (int)$students_total ?></div>
            </div>
            <div class="stat">
                <div class="k">Учнів (зареєстровані, без @ej.local)</div>
                <div class="v"><?= (int)$students_registered ?></div>
            </div>
            <div class="stat">
                <div class="k">Предметів</div>
                <div class="v"><?= (int)$subjects_count ?></div>
            </div>
            <div class="stat">
                <div class="k">Середня оцінка (по всім)</div>
                <div class="v"><?= h($average_grade_fmt) ?></div>
            </div>
        </div>

        <div class="two-col" style="margin-top:16px">
            <div>
                <h2>ТОП груп за кількістю зареєстрованих учнів (без @ej.local)</h2>
                <?php if ($top_registered && $top_registered->num_rows > 0): ?>
                    <div class="table-responsive">
                        <table>
                            <thead>
                                <tr>
                                    <th>Група</th>
                                    <th style="width:140px">Зареєстрованих</th>
                                </tr>
                            </thead>
                            <tbody>
                            <?php while ($r = $top_registered->fetch_assoc()): ?>
                                <tr>
                                    <td><?= h((string)$r['group_name']) ?></td>
                                    <td><?= (int)$r['c'] ?></td>
                                </tr>
                            <?php endwhile; ?>
                            </tbody>
                        </table>
                    </div>
                <?php else: ?>
                    <div class="note">Немає даних. Перевір: у студентів має бути group_id, і email не @ej.local.</div>
                <?php endif; ?>
            </div>

            <div>
                <h2>ТОП груп за активністю перегляду оцінок (31 день)</h2>
                <div class="note" style="margin-bottom:12px">
                    Це запрацює, коли на сторінках перегляду оцінок логується подія <b>grades_view</b>.
                </div>

                <?php if ($logs_action_col === ''): ?>
                    <div class="note">Не можу порахувати ТОП переглядів: у user_logs не знайдено колонки action/action_code.</div>
                <?php else: ?>
                    <?php if ($top_views && $top_views->num_rows > 0): ?>
                        <div class="table-responsive">
                            <table>
                                <thead>
                                    <tr>
                                        <th>Група</th>
                                        <th style="width:140px">Переглядів</th>
                                        <th style="width:160px">Учнів переглядали</th>
                                    </tr>
                                </thead>
                                <tbody>
                                <?php while ($r = $top_views->fetch_assoc()): ?>
                                    <tr>
                                        <td><?= h((string)$r['group_name']) ?></td>
                                        <td><?= (int)$r['views'] ?></td>
                                        <td><?= (int)$r['students'] ?></td>
                                    </tr>
                                <?php endwhile; ?>
                                </tbody>
                            </table>
                        </div>
                    <?php else: ?>
                        <div class="lead">Немає даних.</div>
                    <?php endif; ?>
                <?php endif; ?>
            </div>
        </div>

        <div style="margin-top:16px">
            <h2>ТОП груп за найвищою середньою оцінкою</h2>
            <?php if ($top_avg && $top_avg->num_rows > 0): ?>
                <div class="table-responsive">
                    <table>
                        <thead>
                            <tr>
                                <th>Група</th>
                                <th style="width:160px">Середня оцінка</th>
                                <th style="width:160px">Оцінок враховано</th>
                            </tr>
                        </thead>
                        <tbody>
                        <?php while ($r = $top_avg->fetch_assoc()): ?>
                            <tr>
                                <td><?= h((string)$r['group_name']) ?></td>
                                <td><?= h(number_format((float)$r['avg_grade'], 2)) ?></td>
                                <td><?= (int)$r['grades_count'] ?></td>
                            </tr>
                        <?php endwhile; ?>
                        </tbody>
                    </table>
                </div>
            <?php else: ?>
                <div class="note">Немає даних. Перевір: grades.grade має бути не NULL, і student_id має існувати в users.</div>
            <?php endif; ?>
        </div>
    </section>

    <!-- Очищення -->
    <section class="card">
        <h2>Очищення застарілих даних</h2>
        <p class="lead">
            Видаляє уроки, дата яких старша за 1 рік, і пов’язані з ними оцінки. Також чистить “сирітські” оцінки,
            які посилаються на неіснуючі уроки.
        </p>

        <form method="POST" action="" class="form-grid" onsubmit="return confirm('УВАГА! Ви точно хочете запустити очищення? Це видалить дані старші 1 року.');">
            <div class="checkrow">
                <input type="checkbox" id="confirm_cleanup" name="confirm_cleanup" value="1" required>
                <label for="confirm_cleanup" style="margin:0">Підтверджую очищення застарілих даних</label>
            </div>

            <div>
                <label for="admin_password">Пароль адміністратора</label>
                <input type="password" name="admin_password" id="admin_password" required autocomplete="current-password" placeholder="Введіть пароль">
            </div>

            <button type="submit" name="clear_old_data" class="btn btn-danger">Очистити застарілі записи</button>
        </form>
    </section>
</main>

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

</body>
</html>