<?php
declare(strict_types=1);

$secure = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off');
session_set_cookie_params([
    'lifetime' => 0,
    'path'     => '/',
    'domain'   => '',
    'secure'   => $secure,
    'httponly' => true,
    'samesite' => 'Lax',
]);
session_start();

// Безпечне підключення БД згідно структури проєкту
require_once __DIR__ . '/../includes/db_connect.php';
require_once __DIR__ . '/../includes/logger.php';

// Перевірка авторизації та ролі
$role = $_SESSION['role'] ?? '';
$user_id = (int)($_SESSION['user_id'] ?? 0);
$current_file = basename($_SERVER['PHP_SELF'] ?? 'group_journal.php');

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

if (!function_exists('h')) {
    function h(?string $s): string { return htmlspecialchars((string)$s, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'); }
}

/* ===== Лог: відкриття сторінки "Журнали" (анти-спам 30 сек) ===== */
$k = 'journals_list_view_' . $user_id;
$now = time();
$last = (int)($_SESSION[$k] ?? 0);
if ($now - $last >= 30) {
    $_SESSION[$k] = $now;
    ej_log_action($conn, $user_id, (string)$role, 'journals_list_view', 'Відкрив сторінку «Журнали»');
}

/**
 * Перевірка наявності колонки в таблиці (щоб код не падав, якщо міграцію ще не виконали)
 */
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');

/**
 * Вибірка журналів за курсами (1..3)
 * - admin: всі групи курсу
 * - teacher: лише групи, де він викладає хоч один предмет, а також (якщо є колонка) де він класний керівник
 */
function fetch_course_journals(mysqli $conn, int $course, string $role, int $user_id, bool $has_class_teacher_col): ?mysqli_result {
    if ($role === 'admin') {
        $sql = "SELECT g.id, g.group_name
                FROM `groups` g
                WHERE g.course = ?
                ORDER BY g.order_position ASC, g.group_name ASC";
        $stmt = $conn->prepare($sql);
        if (!$stmt) return null;
        $stmt->bind_param("i", $course);
        $stmt->execute();
        return $stmt->get_result();
    }

    // teacher
    if ($has_class_teacher_col) {
        $sql = "SELECT DISTINCT g.id, g.group_name
                FROM `groups` g
                LEFT JOIN `subjects` s ON s.group_id = g.id
                WHERE g.course = ?
                  AND (
                       s.teacher_id = ?
                       OR g.class_teacher_id = ?
                  )
                ORDER BY g.order_position ASC, g.group_name ASC";
        $stmt = $conn->prepare($sql);
        if (!$stmt) return null;
        $stmt->bind_param("iii", $course, $user_id, $user_id);
        $stmt->execute();
        return $stmt->get_result();
    }

    // Якщо колонки class_teacher_id ще немає — працюємо без неї (щоб не падало)
    $sql = "SELECT DISTINCT g.id, g.group_name
            FROM `groups` g
            INNER JOIN `subjects` s ON s.group_id = g.id
            WHERE g.course = ?
              AND s.teacher_id = ?
            ORDER BY g.order_position ASC, g.group_name ASC";
    $stmt = $conn->prepare($sql);
    if (!$stmt) return null;
    $stmt->bind_param("ii", $course, $user_id);
    $stmt->execute();
    return $stmt->get_result();
}

$course1 = fetch_course_journals($conn, 1, (string)$role, $user_id, $has_class_teacher_col);
$course2 = fetch_course_journals($conn, 2, (string)$role, $user_id, $has_class_teacher_col);
$course3 = fetch_course_journals($conn, 3, (string)$role, $user_id, $has_class_teacher_col);
?>
<!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>Журнали</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;
            --shadow: 0 10px 24px rgba(0,0,0,.08);
            --border: rgba(0,0,0,.10);
            --focus: rgba(67,39,85,.25);

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

        *{box-sizing:border-box}

        html,body{
            margin:0;
            padding:0;
            background:var(--bg);
            color:var(--ink);
            font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Ubuntu,"Noto Sans","Liberation Sans",Arial,sans-serif;
        }

        .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;
        }

        .head{
            display:flex;
            align-items:flex-start;
            justify-content:space-between;
            gap:12px;
            flex-wrap:wrap;
            margin-bottom:10px;
        }

        h1{
            margin:0;
            color:var(--brand-purple);
            font-size:22px;
            font-weight:900;
            letter-spacing:.2px;
        }

        .muted{
            margin:8px 0 0;
            color:var(--muted);
            font-weight:700;
            font-size:13px;
            line-height:1.45;
        }

        .note{
            margin-top:10px;
            background: rgba(163,232,211,.22);
            border: 1px solid rgba(67,39,85,.14);
            color: var(--brand-purple);
            padding: 10px 12px;
            border-radius: 14px;
            font-size: 13px;
            font-weight: 800;
            line-height:1.5;
        }
        .note code{font-weight:900}

        .admin-tabs{
            display:flex;
            gap:10px;
            flex-wrap:wrap;
            align-items:center;
            margin: 0 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(--ink);
            background: rgba(67,39,85,.08);
            border: 1px solid rgba(67,39,85,.18);
            box-shadow: 0 10px 22px rgba(67,39,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(163,232,211,.45);
            border-color: rgba(67,39,85,.22);
            box-shadow: 0 14px 28px rgba(67,39,85,.10);
        }

        .admin-tabs a.active{
            color:#fff;
            background: linear-gradient(135deg, var(--brand-purple) 0%, #4b2a61 55%, rgba(163,232,211,.95) 120%);
            border-color: rgba(255,255,255,.22);
            box-shadow: 0 18px 40px rgba(67,39,85,.18);
        }

        .course-section{margin:18px 0 0}

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

        /* Адаптивна сітка плиток (СТАРЕ) */
        .book-grid{
            display:grid;
            grid-template-columns:repeat(auto-fill,minmax(150px,1fr));
            gap:12px;
            align-items:stretch;
        }

        .book{
            border-radius:16px;
            overflow:hidden;
            border:1px solid rgba(67,39,85,.10);

            /* ===== ВИПРАВЛЕННЯ: фіолетова обкладинка (лише колір) ===== */
            background: linear-gradient(145deg, var(--brand-purple) 0%, var(--brand-purple-2) 100%);

            box-shadow: 0 6px 16px rgba(0,0,0,.06);
            transition: transform .12s ease, box-shadow .12s ease, border-color .12s ease;
            aspect-ratio: 2 / 3;
            position:relative;
        }

        /* легкий "блік" як на фіолетовій обкладинці */
        .book::before{
            content:"";
            position:absolute;
            inset:-35%;
            background: radial-gradient(closest-side at 25% 18%, rgba(255,255,255,.14), rgba(255,255,255,0) 60%);
            pointer-events:none;
        }

        .book:hover{
            transform:translateY(-1px);
            box-shadow: 0 10px 22px rgba(0,0,0,.10);
            border-color: rgba(67,39,85,.18);
        }

        .book-link{
            display:flex;
            width:100%;
            height:100%;
            text-decoration:none;
            color:inherit;
            padding:12px;
            position:relative;
            z-index:1;
        }

        .book-cover{
            width:100%;
            height:100%;
            border-radius:14px;

            /* ===== ВИПРАВЛЕННЯ: прибираємо білу "обкладинку" (лише колір) ===== */
            background: transparent;
            border: 0;

            display:flex;
            align-items:center;
            justify-content:center;
            padding:12px;
            text-align:center;
            position:relative;
        }

        /* ===== ВИПРАВЛЕННЯ: назва групи на білому ярлику (лише колір/фон) ===== */
        .book-cover p{
            margin:0;
            color:var(--brand-purple);
            font-weight:1000;
            font-size:14px;
            line-height:1.25;
            word-wrap:break-word;

            background: rgba(255,255,255,.92);
            border: 1px solid rgba(0,0,0,.10);
            border-radius:16px;
            padding:12px 10px;
            box-shadow: 0 10px 22px rgba(0,0,0,.12);
            max-width:100%;
            overflow-wrap:anywhere;
            hyphens:auto;
        }

        /* ===== ВИПРАВЛЕННЯ: прибираємо "фіолетову точку" (бейдж) ===== */
        .badge{ display:none !important; }

        .empty{
            margin:0;
            color:var(--muted);
            font-weight:700;
            font-size:13px;
        }

        @media (max-width:600px){
            .wrap{padding:12px}
            .card{padding:16px;border-radius:14px}
            .book-grid{grid-template-columns:repeat(auto-fill,minmax(130px,1fr)); gap:10px;}
            .book-link{padding:10px}
            .book-cover p{font-size:13px}
        }
    </style>
</head>
<body>

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

<main class="wrap">
    <?php
    $tabs = [
        ['href' => '/admin/dashboard.php', 'label' => 'Журнали'],
        ['href' => '/journal/group_journal.php', 'label' => 'Управління журналами'],
        ['href' => '/admin/dz/index.php', 'label' => 'Домашнє завдання'],
        ['href' => '/admin/admin_students.php', 'label' => 'Учні'],
        ['href' => '/admin/admin_father.php', 'label' => 'Батьки'],
        ['href' => '/admin/admin_teachers.php', 'label' => 'Вчителі'],
        ['href' => '/admin/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">
        <div class="head">
            <div>
                <h1>Журнали</h1>

                <?php if ($role === 'teacher'): ?>
                    <p class="muted">Показані лише групи, де ви викладаєте предмет(и)<?= $has_class_teacher_col ? ' або є класним керівником' : ''; ?>.</p>
                <?php else: ?>
                    <p class="muted">Переглядайте журнали груп за курсами.</p>
                <?php endif; ?>

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

        <!-- 1 курс -->
        <section class="course-section" aria-labelledby="course1">
            <h2 class="course-title" id="course1">Журнали 1-го курсу</h2>

            <?php if ($course1 && $course1->num_rows > 0): ?>
                <div class="book-grid" role="list">
                    <?php while ($row = $course1->fetch_assoc()): ?>
                        <article class="book" role="listitem">
                            <a class="book-link"
                               href="/journal/view_journal.php?journal_id=<?= (int)$row['id']; ?>"
                               aria-label="Відкрити журнал: <?= h($row['group_name']); ?>">
                                <div class="book-cover">
                                    <span class="badge">1 курс</span>
                                    <p><?= h($row['group_name']); ?></p>
                                </div>
                            </a>
                        </article>
                    <?php endwhile; ?>
                </div>
            <?php else: ?>
                <p class="empty">Наразі немає журналів для 1-го курсу.</p>
            <?php endif; ?>
        </section>

        <!-- 2 курс -->
        <section class="course-section" aria-labelledby="course2">
            <h2 class="course-title" id="course2">Журнали 2-го курсу</h2>

            <?php if ($course2 && $course2->num_rows > 0): ?>
                <div class="book-grid" role="list">
                    <?php while ($row = $course2->fetch_assoc()): ?>
                        <article class="book" role="listitem">
                            <a class="book-link"
                               href="/journal/view_journal.php?journal_id=<?= (int)$row['id']; ?>"
                               aria-label="Відкрити журнал: <?= h($row['group_name']); ?>">
                                <div class="book-cover">
                                    <span class="badge">2 курс</span>
                                    <p><?= h($row['group_name']); ?></p>
                                </div>
                            </a>
                        </article>
                    <?php endwhile; ?>
                </div>
            <?php else: ?>
                <p class="empty">Наразі немає журналів для 2-го курсу.</p>
            <?php endif; ?>
        </section>

        <!-- 3 курс -->
        <section class="course-section" aria-labelledby="course3">
            <h2 class="course-title" id="course3">Журнали 3-го курсу</h2>

            <?php if ($course3 && $course3->num_rows > 0): ?>
                <div class="book-grid" role="list">
                    <?php while ($row = $course3->fetch_assoc()): ?>
                        <article class="book" role="listitem">
                            <a class="book-link"
                               href="/journal/view_journal.php?journal_id=<?= (int)$row['id']; ?>"
                               aria-label="Відкрити журнал: <?= h($row['group_name']); ?>">
                                <div class="book-cover">
                                    <span class="badge">3 курс</span>
                                    <p><?= h($row['group_name']); ?></p>
                                </div>
                            </a>
                        </article>
                    <?php endwhile; ?>
                </div>
            <?php else: ?>
                <p class="empty">Наразі немає журналів для 3-го курсу.</p>
            <?php endif; ?>
        </section>
    </section>
</main>

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

</body>
</html>
