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

/* ===== Підключення логера (якщо є) ===== */
$loggerPath = __DIR__ . '/../includes/logger.php';
if (is_file($loggerPath)) {
    require_once $loggerPath;
}

/* ===== Безпечний екранер ===== */
function h(?string $s): string { return htmlspecialchars((string)$s, ENT_QUOTES, 'UTF-8'); }

/* ---- Авторизація */
$role = $_SESSION['role'] ?? '';
$user_id = (int)($_SESSION['user_id'] ?? 0);

if ($user_id <= 0 || !in_array($role, ['admin', 'teacher'], true)) {
    header("Location: ../index.php");
    exit();
}

/* ---- CSRF (одноразовий на сесію) */
if (empty($_SESSION['csrf_token'])) {
    $_SESSION['csrf_token'] = bin2hex(random_bytes(16));
}
$CSRF = $_SESSION['csrf_token'];

/* ---- Flash (повідомлення після редіректів) */
function flash_get(string $key): ?string {
    if (!isset($_SESSION['flash'][$key])) return null;
    $msg = $_SESSION['flash'][$key];
    unset($_SESSION['flash'][$key]);
    return $msg;
}
function flash_set(string $key, string $msg): void {
    $_SESSION['flash'][$key] = $msg;
}

/* ===== Безпечний виклик логера (без конфліктів і без знання сигнатури) ===== */
function ej_log(mysqli $conn, int $user_id, string $action, array $ctx = []): void {
    $ctx['action']  = $action;
    $ctx['user_id'] = $user_id;
    $ctx['role']    = (string)($_SESSION['role'] ?? '');
    $ctx['ip']      = (string)($_SERVER['REMOTE_ADDR'] ?? '');
    $ctx['ua']      = (string)($_SERVER['HTTP_USER_AGENT'] ?? '');
    $ctx['uri']     = (string)($_SERVER['REQUEST_URI'] ?? '');
    $ctx['method']  = (string)($_SERVER['REQUEST_METHOD'] ?? '');
    $ctx['ts']      = date('Y-m-d H:i:s');

    try {
        if (function_exists('ej_log_action')) {
            $rf = new ReflectionFunction('ej_log_action');
            $n  = $rf->getNumberOfParameters();

            if ($n >= 4) { @ej_log_action($conn, $user_id, $action, $ctx); return; }
            if ($n === 3) { @ej_log_action($user_id, $action, $ctx); return; }
            if ($n === 2) { @ej_log_action($action, $ctx); return; }
            @ej_log_action($action); return;
        }

        if (function_exists('log_action')) {
            $rf = new ReflectionFunction('log_action');
            $n  = $rf->getNumberOfParameters();

            if ($n >= 4) { @log_action($conn, $user_id, $action, json_encode($ctx, JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES)); return; }
            if ($n === 3) { @log_action($user_id, $action, json_encode($ctx, JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES)); return; }
            if ($n === 2) { @log_action($action, json_encode($ctx, JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES)); return; }
            @log_action($action); return;
        }

        if (function_exists('app_log')) {
            @app_log($action, $ctx);
            return;
        }

        if (function_exists('logger_log')) {
            @logger_log($user_id, $action, json_encode($ctx, JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES));
            return;
        }
    } catch (Throwable $e) {
        // тихо
    }
}

/* ---- Хелпер: чи є колонка в таблиці (щоб не падати, якщо міграцію ще не зробили) */
function db_has_column(mysqli $conn, string $table, string $column): bool {
    $db = '';
    if ($res = $conn->query("SELECT DATABASE() AS db")) {
        $row = $res->fetch_assoc();
        $db = $row['db'] ?? '';
        $res->free();
    }
    if ($db === '') return false;

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

    $stmt->bind_param("sss", $db, $table, $column);
    $stmt->execute();
    $stmt->store_result();
    $exists = ($stmt->num_rows > 0);
    $stmt->close();

    return $exists;
}

$has_class_teacher_col = db_has_column($conn, 'groups', 'class_teacher_id');

/* ---- Вхідні дані */
$journal_id = isset($_GET['journal_id']) ? (int)$_GET['journal_id'] : 0;
if ($journal_id <= 0) {
    http_response_code(400);
    die("Невірний ID журналу!");
}

/* ---- Інфо про журнал */
$journal_stmt = $conn->prepare("SELECT group_name" . ($has_class_teacher_col ? ", class_teacher_id" : "") . " FROM `groups` WHERE id = ?");
$journal_stmt->bind_param("i", $journal_id);
$journal_stmt->execute();
$journal_res = $journal_stmt->get_result();
if ($journal_res->num_rows === 0) {
    http_response_code(404);
    die("Журнал не знайдено!");
}
$journal = $journal_res->fetch_assoc();
$journal_stmt->close();

/* ---- Доступ для teacher (щоб не відкривав чужі журнали прямим URL) */
if ($role === 'teacher') {
    $allowed = false;

    // 1) Якщо викладає хоч один предмет у цій групі
    $chk = $conn->prepare("SELECT 1 FROM `subjects` WHERE group_id = ? AND teacher_id = ? LIMIT 1");
    $chk->bind_param("ii", $journal_id, $user_id);
    $chk->execute();
    $chk->store_result();
    if ($chk->num_rows > 0) $allowed = true;
    $chk->close();

    // 2) Якщо є колонка class_teacher_id — дозволяємо і класному керівнику
    if (!$allowed && $has_class_teacher_col) {
        $ct = (int)($journal['class_teacher_id'] ?? 0);
        if ($ct === $user_id) $allowed = true;
    }

    if (!$allowed) {
        ej_log($conn, $user_id, 'journal_access_denied', [
            'journal_id' => $journal_id,
            'group_name' => (string)($journal['group_name'] ?? '')
        ]);
        flash_set('error', 'У вас немає доступу до цього журналу.');
        header("Location: group_journal.php");
        exit();
    }
}

/* ---- Обробка дій */
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // Перевірка CSRF
    $csrf = $_POST['csrf_token'] ?? '';
    if (!hash_equals($CSRF, $csrf)) {
        ej_log($conn, $user_id, 'csrf_failed', [
            'journal_id' => $journal_id,
            'where' => 'view_journal.php'
        ]);
        flash_set('error', 'Помилка безпеки (CSRF). Оновіть сторінку і спробуйте ще раз.');
        header("Location: view_journal.php?journal_id=" . urlencode((string)$journal_id));
        exit();
    }

    // Додавання предмету (admin + teacher)
    if (isset($_POST['add_subject'])) {
        $subject_name = trim($_POST['subject_name'] ?? '');
        $teacher_id   = (int)($_POST['teacher_id'] ?? 0);

        if ($subject_name === '') {
            flash_set('error', 'Назва предмету не може бути порожньою.');
            ej_log($conn, $user_id, 'subject_add_fail', ['journal_id'=>$journal_id,'reason'=>'empty_subject_name']);
        } elseif (mb_strlen($subject_name) > 255) {
            flash_set('error', 'Назва предмету не може бути довшою за 255 символів.');
            ej_log($conn, $user_id, 'subject_add_fail', ['journal_id'=>$journal_id,'reason'=>'subject_name_too_long','len'=>mb_strlen($subject_name)]);
        } elseif ($teacher_id <= 0) {
            flash_set('error', 'Оберіть викладача зі списку.');
            ej_log($conn, $user_id, 'subject_add_fail', ['journal_id'=>$journal_id,'reason'=>'teacher_not_selected']);
        } else {
            $stmt = $conn->prepare("INSERT INTO `subjects` (group_id, subject_name, teacher_id) VALUES (?, ?, ?)");
            $stmt->bind_param("isi", $journal_id, $subject_name, $teacher_id);
            if ($stmt->execute()) {
                ej_log($conn, $user_id, 'subject_add', [
                    'journal_id' => $journal_id,
                    'subject_id' => (int)$stmt->insert_id,
                    'subject_name' => $subject_name,
                    'teacher_id' => $teacher_id
                ]);
                flash_set('success', "Предмет «" . h($subject_name) . "» успішно доданий.");
            } else {
                ej_log($conn, $user_id, 'subject_add_fail', [
                    'journal_id' => $journal_id,
                    'subject_name' => $subject_name,
                    'teacher_id' => $teacher_id,
                    'mysql_error' => (string)$conn->error
                ]);
                flash_set('error', "Помилка при додаванні предмету.");
            }
            $stmt->close();
        }

        header("Location: view_journal.php?journal_id=" . urlencode((string)$journal_id));
        exit();
    }

    // Видалення предмету (ЛИШЕ admin + пароль)
    if (isset($_POST['delete_subject'])) {
        if ($role !== 'admin') {
            ej_log($conn, $user_id, 'subject_delete_denied', ['journal_id'=>$journal_id,'reason'=>'not_admin']);
            flash_set('error', 'Видаляти предмети може лише адміністратор.');
            header("Location: view_journal.php?journal_id=" . urlencode((string)$journal_id));
            exit();
        }

        $subject_id = (int)($_POST['subject_id'] ?? 0);
        $admin_password = (string)($_POST['admin_password'] ?? '');

        if ($subject_id <= 0) {
            ej_log($conn, $user_id, 'subject_delete_fail', ['journal_id'=>$journal_id,'reason'=>'bad_subject_id']);
            flash_set('error', "Невірний ID предмету.");
            header("Location: view_journal.php?journal_id=" . urlencode((string)$journal_id));
            exit();
        }
        if (trim($admin_password) === '') {
            ej_log($conn, $user_id, 'subject_delete_fail', ['journal_id'=>$journal_id,'subject_id'=>$subject_id,'reason'=>'empty_admin_password']);
            flash_set('error', "Для видалення введіть пароль адміністратора.");
            header("Location: view_journal.php?journal_id=" . urlencode((string)$journal_id));
            exit();
        }

        // Перевіряємо пароль адміна
        $p = $conn->prepare("SELECT `password` FROM `users` WHERE id = ? AND role = 'admin' LIMIT 1");
        $p->bind_param("i", $user_id);
        $p->execute();
        $res = $p->get_result();
        $row = $res ? $res->fetch_assoc() : null;
        $p->close();

        $hash = $row['password'] ?? '';
        if ($hash === '' || !password_verify($admin_password, $hash)) {
            ej_log($conn, $user_id, 'admin_password_wrong', ['journal_id'=>$journal_id,'subject_id'=>$subject_id]);
            flash_set('error', 'Невірний пароль адміністратора.');
            header("Location: view_journal.php?journal_id=" . urlencode((string)$journal_id));
            exit();
        }

        // Перевіримо, що предмет належить цьому журналу
        $chkS = $conn->prepare("SELECT 1 FROM `subjects` WHERE id = ? AND group_id = ? LIMIT 1");
        $chkS->bind_param("ii", $subject_id, $journal_id);
        $chkS->execute();
        $chkS->store_result();
        $exists = ($chkS->num_rows > 0);
        $chkS->close();

        if (!$exists) {
            ej_log($conn, $user_id, 'subject_delete_fail', ['journal_id'=>$journal_id,'subject_id'=>$subject_id,'reason'=>'subject_not_in_journal']);
            flash_set('error', "Не знайдено такий предмет у цьому журналі.");
            header("Location: view_journal.php?journal_id=" . urlencode((string)$journal_id));
            exit();
        }

        // Акуратно чистимо пов’язані дані (бо MyISAM, без FK)
        // 1) видаляємо оцінки по уроках цього предмету
        $delGrades = $conn->prepare("
            DELETE g
            FROM `grades` g
            JOIN `lessons` l ON l.id = g.lesson_id
            WHERE l.subject_id = ?
        ");
        if ($delGrades) {
            $delGrades->bind_param("i", $subject_id);
            $delGrades->execute();
            $delGrades->close();
        }

        // 2) видаляємо уроки предмету
        $delLessons = $conn->prepare("DELETE FROM `lessons` WHERE subject_id = ?");
        if ($delLessons) {
            $delLessons->bind_param("i", $subject_id);
            $delLessons->execute();
            $delLessons->close();
        }

        // 3) видаляємо сам предмет
        $stmt = $conn->prepare("DELETE FROM `subjects` WHERE id = ? AND group_id = ?");
        $stmt->bind_param("ii", $subject_id, $journal_id);
        if ($stmt->execute()) {
            if ($stmt->affected_rows > 0) {
                ej_log($conn, $user_id, 'subject_delete', ['journal_id'=>$journal_id,'subject_id'=>$subject_id]);
                flash_set('success', "Предмет успішно видалений.");
            } else {
                ej_log($conn, $user_id, 'subject_delete_fail', ['journal_id'=>$journal_id,'subject_id'=>$subject_id,'reason'=>'affected_rows_zero']);
                flash_set('error', "Не вдалося видалити предмет.");
            }
        } else {
            ej_log($conn, $user_id, 'subject_delete_fail', [
                'journal_id'=>$journal_id,
                'subject_id'=>$subject_id,
                'reason'=>'delete_query_failed',
                'mysql_error'=>(string)$conn->error
            ]);
            flash_set('error', "Не вдалося видалити предмет.");
        }
        $stmt->close();

        header("Location: view_journal.php?journal_id=" . urlencode((string)$journal_id));
        exit();
    }
}

/* ---- Список предметів */
$subjects_stmt = $conn->prepare(
    "SELECT s.id, s.subject_name AS name, u.full_name AS teacher_name, s.teacher_id
     FROM `subjects` s
     LEFT JOIN `users` u ON s.teacher_id = u.id
     WHERE s.group_id = ?
     ORDER BY s.id ASC"
);
$subjects_stmt->bind_param("i", $journal_id);
$subjects_stmt->execute();
$subjects_result = $subjects_stmt->get_result();

/* ---- Список викладачів */
$teachers_result = $conn->query("SELECT id, full_name FROM `users` WHERE role IN ('teacher','admin') ORDER BY full_name ASC");

/* ---- Flash messages */
$error   = flash_get('error');
$success = flash_get('success');
?>
<!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">
    <title><?= h($journal['group_name']); ?> — Журнал</title>
    <link rel="stylesheet" href="../assets/css/style.css">
    <style>
        :root{
            --brand-mint:#a3e8d3;
            --brand-mint-2:#92dec7;
            --brand-purple:#432755;
            --brand-purple-2:#3a244d;

            --ink:#1f2937;
            --muted:#4b5563;
            --bg:#f6f7fb;
            --card:#ffffff;

            --border: rgba(0,0,0,.10);
            --shadow: 0 10px 24px rgba(0,0,0,.08);
            --shadow-soft: 0 6px 16px rgba(0,0,0,.06);

            --focus: rgba(67,39,85,.25);

            --chip-bg: rgba(163,232,211,.22);
            --chip-br: rgba(67,39,85,.14);

            --danger:#b91c1c;
            --success:#0a7c2f;
        }

        *{box-sizing:border-box}
        body{
            font-family:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,"Noto Sans","Helvetica Neue",Arial;
            margin:0;
            background:var(--bg);
            color:var(--ink);
        }

        .wrap{
            max-width:1100px;
            margin:16px auto;
            padding:16px;
        }
        .card{
            background:var(--card);
            border:1px solid var(--border);
            border-radius:16px;
            box-shadow:var(--shadow);
            padding:18px;
        }

        .page-head{
            display:flex;
            align-items:flex-start;
            justify-content:space-between;
            gap:12px;
            flex-wrap:wrap;
            margin-bottom:12px;
        }
        .title{
            margin:0;
            font-size:22px;
            color:var(--brand-purple);
            font-weight:900;
            letter-spacing:.2px;
        }
        .subtitle{
            margin:6px 0 0 0;
            color:var(--muted);
            font-weight:700;
            font-size:13px;
            line-height:1.45;
        }

        .note{
            margin: 10px 0 0;
            padding: 12px 14px;
            border-radius: 14px;
            background: rgba(163,232,211,.22);
            border: 1px solid rgba(67,39,85,.14);
            color: var(--brand-purple);
            font-weight: 700;
            font-size: 13px;
            line-height: 1.55;
        }
        .note code{
            background: rgba(255,255,255,.7);
            border: 1px solid rgba(0,0,0,.08);
            padding: 2px 6px;
            border-radius: 8px;
            font-weight: 900;
        }

        .alert{
            border-radius: 14px;
            padding: 12px 14px;
            font-weight: 800;
            font-size: 13px;
            line-height: 1.55;
            margin: 10px 0 0;
            border: 1px solid transparent;
        }
        .alert--error{
            color: var(--danger);
            background: rgba(185,28,28,.08);
            border-color: rgba(185,28,28,.18);
        }
        .alert--success{
            color: var(--success);
            background: rgba(10,124,47,.10);
            border-color: rgba(10,124,47,.18);
        }

        .section-title{
            margin:16px 0 10px;
            font-size:16px;
            font-weight:900;
            color:var(--brand-purple);
        }

        /* form */
        .form{ display:grid; gap:12px; }
        .form-row{
            display:grid;
            gap:12px;
            grid-template-columns: repeat(12, 1fr);
            align-items:end;
        }
        .field{ grid-column: span 6; text-align:left; }
        .field label{
            display:block;
            margin:0 0 6px;
            font-weight:900;
            color:var(--brand-purple);
            font-size:14px;
        }
        .field input[type="text"],
        .field select{
            width:100%;
            padding:12px;
            border:1px solid rgba(0,0,0,.14);
            border-radius:12px;
            font-size:15px;
            background:#fff;
            outline:none;
            transition: border-color .15s ease, box-shadow .15s ease;
        }
        .field input[type="text"]:focus,
        .field select:focus{
            border-color: rgba(67,39,85,.35);
            box-shadow:0 0 0 4px var(--focus);
        }

        .btn{
            display:inline-flex;
            align-items:center;
            justify-content:center;
            gap:10px;
            padding:12px 16px;
            border-radius:12px;
            border:1px solid transparent;
            cursor:pointer;
            font-weight:900;
            font-size:14px;
            user-select:none;
            transition: transform .12s ease, box-shadow .12s ease, filter .12s ease, background .15s ease;
            text-decoration:none;
            white-space:nowrap;
        }
        .btn:active{ transform: translateY(1px); }

        .btn-primary{
            color:#fff;
            background: linear-gradient(180deg, var(--brand-purple), var(--brand-purple-2));
            border-color: rgba(255,255,255,.14);
            box-shadow: 0 10px 18px rgba(67,39,85,.16);
        }
        .btn-primary:hover{
            box-shadow: 0 14px 24px rgba(67,39,85,.22);
            filter: saturate(1.05);
        }

        .btn-danger{
            color:#fff;
            background: linear-gradient(180deg, #b91c1c, #991b1b);
            border-color: rgba(255,255,255,.14);
            box-shadow: 0 10px 18px rgba(185,28,28,.18);
        }
        .btn-danger:hover{
            box-shadow: 0 14px 24px rgba(185,28,28,.22);
            filter: saturate(1.05);
        }

        .table-wrap{
            margin-top:10px;
            border-radius:16px;
            overflow:hidden;
            border:1px solid rgba(0,0,0,.10);
            box-shadow: var(--shadow-soft);
        }
        table{
            width:100%;
            border-collapse:collapse;
            table-layout:fixed;
            background:#fff;
        }
        th,td{
            padding:12px 10px;
            text-align:center;
            border-bottom:1px solid rgba(0,0,0,.08);
            vertical-align:middle;
        }
        thead th{
            background: linear-gradient(135deg, rgba(67,39,85,.96) 0%, rgba(67,39,85,.86) 100%);
            color:#fff;
            border-bottom: 1px solid rgba(255,255,255,.18);
        }

        .col-n{width:10%}
        .col-subject{width:45%; text-align:left; font-weight:900;}
        .col-teacher{width:30%; text-align:left;}
        .col-actions{width:15%}

        .subject-link{
            display:inline-flex;
            align-items:center;
            gap:8px;
            color: var(--brand-purple) !important;
            font-weight: 900;
            text-decoration:none !important;
            line-height:1.25;
        }
        .subject-link:hover{
            color: var(--brand-purple-2) !important;
            text-decoration:none !important;
        }

        .teacher-muted{ color: var(--muted); font-weight: 700; }

        .actions{
            display:flex;
            justify-content:center;
            align-items:center;
            gap:8px;
            flex-wrap:wrap;
        }
        form.inline{ display:inline; margin:0; }

        /* ===== ВАЖЛИВЕ ВИПРАВЛЕННЯ ДЛЯ ТЕЛЕФОНУ =====
           На малих екранах перетворюємо рядок таблиці на "картку",
           щоб кнопка "Видалити" не перекривала ПІБ викладача. */
        @media (max-width: 820px){
            .field{ grid-column: span 12; }
        }

        @media (max-width:600px){
            .wrap{padding:12px}
            .card{padding:16px;border-radius:14px}

            .table-wrap{
                border-radius:16px;
                overflow:visible; /* щоб "картки" не обрізались */
                border:0;
                box-shadow:none;
            }

            table{ border-collapse:separate; border-spacing:0 12px; table-layout:auto; }
            thead{ display:none; }
            tbody tr{
                display:grid;
                grid-template-columns: 56px 1fr; /* № + контент */
                grid-template-areas:
                    "n subject"
                    "teacher teacher"
                    "actions actions";
                gap:10px 12px;

                background:#fff;
                border:1px solid rgba(0,0,0,.10);
                border-radius:16px;
                box-shadow: 0 10px 22px rgba(0,0,0,.06);
                padding:12px;
            }

            tbody td{
                border:0;
                padding:0;
                text-align:left;
            }

            td.col-n{
                grid-area:n;
                font-weight:1000;
                color:var(--brand-purple);
                background: rgba(163,232,211,.22);
                border:1px solid rgba(67,39,85,.14);
                border-radius:12px;
                width:56px;
                height:44px;
                display:flex;
                align-items:center;
                justify-content:center;
            }
            td.col-subject{ grid-area:subject; }
            td.col-teacher{ grid-area:teacher; }
            td.col-actions{ grid-area:actions; }

            td.col-teacher{
                color: var(--ink);
                font-weight:800;
                line-height:1.25;
                padding-top:2px;
                border-top: 1px dashed rgba(0,0,0,.10);
                margin-top:2px;
            }

            .actions{
                justify-content:flex-start;
                width:100%;
            }
            .actions .btn{
                width:100%;
                border-radius:14px;
                padding:12px 14px;
            }
        }
    </style>
    <script>
        function confirmDeleteWithPassword(name, formEl){
            if (!confirm("Ви дійсно хочете видалити предмет «" + name + "»?\n\nУВАГА: Будуть видалені всі уроки та оцінки цього предмету.")) {
                return false;
            }
            const pwd = prompt("Для підтвердження введіть пароль адміністратора:");
            if (pwd === null) return false;

            const input = formEl.querySelector('input[name="admin_password"]');
            if (!input) return false;
            input.value = pwd;

            return true;
        }
    </script>
</head>
<body>

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

<main class="wrap">
    <section class="card">
        <div class="page-head">
            <div>
                <h1 class="title"><?= h($journal['group_name']); ?></h1>
                <div class="subtitle">Управління предметами та викладачами цього журналу.</div>
            </div>
        </div>

        <?php if ($role === 'teacher' && !$has_class_teacher_col): ?>
            <div class="note"><strong>Примітка:</strong> функція “класний керівник” ще не активна — в БД немає поля <code>groups.class_teacher_id</code>.</div>
        <?php endif; ?>

        <?php if ($error): ?><div class="alert alert--error"><?= h($error); ?></div><?php endif; ?>
        <?php if ($success): ?><div class="alert alert--success"><?= h($success); ?></div><?php endif; ?>

        <div class="section-title">Додати предмет</div>
        <form class="form" method="POST" action="">
            <input type="hidden" name="csrf_token" value="<?= h($CSRF); ?>">

            <div class="form-row">
                <div class="field">
                    <label for="subject_name">Назва предмету</label>
                    <input type="text" name="subject_name" id="subject_name" maxlength="255" required>
                </div>

                <div class="field">
                    <label for="teacher_id">Викладач</label>
                    <select name="teacher_id" id="teacher_id" required>
                        <?php if ($teachers_result && $teachers_result->num_rows > 0): ?>
                            <?php while ($t = $teachers_result->fetch_assoc()): ?>
                                <option value="<?= (int)$t['id']; ?>"><?= h($t['full_name']); ?></option>
                            <?php endwhile; ?>
                        <?php else: ?>
                            <option value="">Немає викладачів</option>
                        <?php endif; ?>
                    </select>
                </div>
            </div>

            <button class="btn btn-primary" type="submit" name="add_subject">Додати предмет</button>
        </form>

        <div class="section-title">Список предметів</div>

        <?php if ($subjects_result && $subjects_result->num_rows > 0): ?>
            <div class="table-wrap">
                <table>
                    <thead>
                        <tr>
                            <th class="col-n">№</th>
                            <th class="col-subject">Назва предмету</th>
                            <th class="col-teacher">Викладач</th>
                            <?php if ($role === 'admin'): ?>
                                <th class="col-actions">Дія</th>
                            <?php endif; ?>
                        </tr>
                    </thead>
                    <tbody>
                        <?php $i=1; while ($row = $subjects_result->fetch_assoc()): ?>
                            <tr>
                                <td class="col-n"><?= $i++; ?></td>
                                <td class="col-subject">
                                    <a class="subject-link" href="subject_journal.php?subject_id=<?= (int)$row['id']; ?>">
                                        <?= h($row['name']); ?>
                                    </a>
                                </td>
                                <td class="col-teacher">
                                    <?= $row['teacher_name'] ? h($row['teacher_name']) : '<span class="teacher-muted">Не вказано</span>'; ?>
                                </td>

                                <?php if ($role === 'admin'): ?>
                                    <td class="col-actions">
                                        <div class="actions">
                                            <form class="inline" method="POST" action=""
                                                  onsubmit="return confirmDeleteWithPassword('<?= h($row['name']); ?>', this);">
                                                <input type="hidden" name="csrf_token" value="<?= h($CSRF); ?>">
                                                <input type="hidden" name="subject_id" value="<?= (int)$row['id']; ?>">
                                                <input type="hidden" name="admin_password" value="">
                                                <button class="btn btn-danger" type="submit" name="delete_subject">Видалити</button>
                                            </form>
                                        </div>
                                    </td>
                                <?php endif; ?>
                            </tr>
                        <?php endwhile; ?>
                    </tbody>
                </table>
            </div>
        <?php else: ?>
            <div class="note">Наразі немає предметів у цьому журналі.</div>
        <?php endif; ?>
    </section>
</main>

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

</body>
</html>
