<?php
declare(strict_types=1);

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

require_once __DIR__ . '/includes/db_connect.php';

/* ===== Вихід через ?logout=1 (залишено для сумісності, хоча є /logout.php) ===== */
if (isset($_GET['logout'])) {
    $_SESSION = [];
    if (ini_get("session.use_cookies")) {
        $params = session_get_cookie_params();
        setcookie(session_name(), '', time() - 42000, $params['path'], $params['domain'], $params['secure'], $params['httponly']);
    }
    session_destroy();
    header("Location: index.php");
    exit;
}

/* ===== Сесія / Ролі ===== */
$is_logged_in = isset($_SESSION['user_id']);
$user_role    = $_SESSION['role'] ?? '';
$full_name    = $_SESSION['full_name'] ?? 'Користувач';

/* ===== Простий CSRF для форми логіну ===== */
if (empty($_SESSION['csrf_token'])) {
    $_SESSION['csrf_token'] = bin2hex(random_bytes(16));
}
$csrf_token = $_SESSION['csrf_token'];

/* ===== Отримання журналів (груп) для адміна/викладача ===== */
$journals_by_course = [1 => [], 2 => [], 3 => []];

if ($is_logged_in && in_array($user_role, ['teacher', 'admin'], true)) {
    if ($user_role === 'teacher') {
        $teacher_id = (int)$_SESSION['user_id'];

        // ВАЖЛИВО: показуємо групи де він викладає (subjects.teacher_id)
        // + групи де він класний керівник (groups.class_teacher_id)
        $sql = "
            SELECT x.id, x.group_name, x.course
            FROM (
                SELECT DISTINCT g.id, g.group_name, g.course
                FROM `groups` g
                JOIN subjects s ON s.group_id = g.id
                WHERE s.teacher_id = ?

                UNION

                SELECT g2.id, g2.group_name, g2.course
                FROM `groups` g2
                WHERE g2.class_teacher_id = ?
            ) x
            ORDER BY x.course ASC, x.group_name ASC
        ";

        if ($stmt = $conn->prepare($sql)) {
            $stmt->bind_param("ii", $teacher_id, $teacher_id);
            $stmt->execute();
            $res = $stmt->get_result();
            while ($row = $res->fetch_assoc()) {
                $c = (int)$row['course'];
                if (isset($journals_by_course[$c])) $journals_by_course[$c][] = $row;
            }
            $stmt->close();
        }
    } else { // admin
        $sql = "SELECT id, group_name, course
                FROM `groups`
                ORDER BY course ASC, group_name ASC";
        if ($res = $conn->query($sql)) {
            while ($row = $res->fetch_assoc()) {
                $c = (int)$row['course'];
                if (isset($journals_by_course[$c])) $journals_by_course[$c][] = $row;
            }
        }
    }
}

/* ===== Допоміжна: IP клієнта (IPv4/IPv6) ===== */
function client_ip(): string {
    $candidates = [
        $_SERVER['HTTP_X_FORWARDED_FOR'] ?? '',
        $_SERVER['HTTP_CLIENT_IP'] ?? '',
        $_SERVER['REMOTE_ADDR'] ?? '',
    ];
    foreach ($candidates as $raw) {
        if (!$raw) continue;
        foreach (explode(',', $raw) as $p) {
            $ip = trim($p);
            if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_IPV6)) {
                return $ip;
            }
        }
    }
    return '0.0.0.0';
}

/* ===== Логін (безпечний) ===== */
$error = '';
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['login'])) {
    $csrf_ok = hash_equals($_SESSION['csrf_token'] ?? '', $_POST['csrf_token'] ?? '');
    if (!$csrf_ok) {
        http_response_code(400);
        $error = 'Невірні дані для входу.';
    } else {
        $email    = strtolower(trim((string)($_POST['email'] ?? '')));
        $password = (string)($_POST['password'] ?? '');

        if (!filter_var($email, FILTER_VALIDATE_EMAIL) || $password === '') {
            $error = 'Невірні дані для входу.';
        } else {
            $q = "SELECT id, role, full_name, group_id, password, active FROM users WHERE email = ? LIMIT 1";
            if ($stmt = $conn->prepare($q)) {
                $stmt->bind_param("s", $email);
                $stmt->execute();
                $res  = $stmt->get_result();

                $user = $res->fetch_assoc() ?: null;

                $ok = $user && (int)$user['active'] === 1 && password_verify($password, $user['password']);

                if ($ok) {
                    session_regenerate_id(true);
                    $_SESSION['user_id']   = (int)$user['id'];
                    $_SESSION['role']      = (string)$user['role'];
                    $_SESSION['full_name'] = (string)$user['full_name'];
                    $_SESSION['group_id']  = $user['group_id'] ?? null;

                    $ip  = client_ip();
                    $now = date('Y-m-d H:i:s');

                    if ($upd = $conn->prepare("UPDATE users SET last_login_at = NOW(), last_login_ip = INET6_ATON(?) WHERE id = ?")) {
                        $uid = (int)$user['id'];
                        $upd->bind_param("si", $ip, $uid);
                        $upd->execute();
                        if ($upd->errno === 1305) { // якщо немає INET6_ATON
                            if ($u2 = $conn->prepare("UPDATE users SET last_login_at = ? WHERE id = ?")) {
                                $u2->bind_param("si", $now, $uid);
                                $u2->execute();
                                $u2->close();
                            }
                        }
                        $upd->close();
                    } else {
                        if ($u2 = $conn->prepare("UPDATE users SET last_login_at = ? WHERE id = ?")) {
                            $uid = (int)$user['id'];
                            $u2->bind_param("si", $now, $uid);
                            $u2->execute();
                            $u2->close();
                        }
                    }
                    $_SESSION['last_login_at'] = $now;
                    error_log('auth_success ip=' . ($_SERVER['REMOTE_ADDR'] ?? 'n/a'));

                    header("Location: index.php");
                    exit;
                } else {
                    $error = 'Невірні дані для входу.';
                    error_log('auth_fail ip=' . ($_SERVER['REMOTE_ADDR'] ?? 'n/a'));
                }
                $stmt->close();
            } else {
                $error = 'Тимчасова помилка. Спробуйте ще раз.';
                error_log('auth_stmt_prepare_failed');
            }
        }
    }
}

// Назва для хедера (показується біля логотипу)
$header_title = 'Електронний журнал';
?>
<!DOCTYPE html>
<html lang="uk">
<head>
  <meta charset="UTF-8" />
  <title>Електронний журнал</title>
  <meta name="viewport" content="width=device-width, initial-scale=1" />
  <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;
        --card:#ffffff;
        --border: rgba(0,0,0,.10);
        --shadow: 0 10px 24px rgba(0,0,0,.08);

        --primary: var(--brand-purple);
        --primary-hover: var(--brand-purple-2);
        --primary-text:#fff;

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

    *{box-sizing:border-box}

    /* Локальний layout для головної */
    .home{
        max-width: 1100px;
        margin: 16px auto;
        padding: 16px;
    }
    .home-card{
        background: var(--card);
        border-radius: 16px;
        box-shadow: var(--shadow);
        border: 1px solid rgba(0,0,0,.06);
        padding: 18px;
    }

    .center{ text-align:center; }

    .lead{
        margin: 6px 0 0 0;
        color: var(--muted);
        font-weight: 700;
    }

    /* ===== Login box ===== */
    .form-container{
        display:flex;
        justify-content:center;
        flex-wrap:wrap;
        gap:16px;
        margin-top:16px;
    }
    .form-box{
        background: linear-gradient(180deg, rgba(163,232,211,.16), rgba(255,255,255,1) 55%);
        padding:16px;
        border-radius:16px;
        box-shadow: 0 10px 22px rgba(0,0,0,.08);
        width: 340px;
        max-width: 100%;
        text-align:left;
        border: 1px solid rgba(67,39,85,.10);
    }
    .form-box h3{
        margin-top:0;
        color: var(--brand-purple);
        font-weight: 900;
        letter-spacing: .2px;
    }
    .form-box label{
        display:block;
        margin-bottom:6px;
        font-weight:900;
        color: var(--brand-purple);
    }
    .form-box input{
        width:100%;
        padding: 10px 12px;
        margin-bottom: 12px;
        border: 1px solid rgba(0,0,0,.14);
        border-radius: 12px;
        outline: none;
        transition: border-color .15s ease, box-shadow .15s ease;
        background: #fff;
        color: var(--ink);
    }
    .form-box input:focus{
        border-color: rgba(67,39,85,.35);
        box-shadow: 0 0 0 4px var(--focus);
    }
    .form-box button{
        width:100%;
        padding: 12px 16px;
        border:none;
        border-radius: 12px;
        background: var(--primary);
        color: var(--primary-text);
        font-weight: 900;
        cursor:pointer;
        box-shadow: 0 10px 18px rgba(67,39,85,.16);
        transition: background .15s ease, transform .05s ease, box-shadow .15s ease;
    }
    .form-box button:hover{
        background: var(--primary-hover);
        box-shadow: 0 12px 22px rgba(67,39,85,.20);
    }
    .form-box button:active{ transform: translateY(1px); }

    .btn-forgot{
        display:block;
        width:100%;
        text-align:center;
        margin-top:10px;
        padding:10px 14px;
        border-radius:12px;
        text-decoration:none;
        font-weight:900;
        letter-spacing:.2px;
        background: linear-gradient(135deg, rgba(163,232,211,.55) 0%, rgba(255,255,255,.92) 55%, rgba(163,232,211,.35) 100%);
        color: var(--brand-purple);
        border: 1px solid rgba(67,39,85,.14);
        box-shadow: 0 8px 16px rgba(0,0,0,.08), inset 0 1px 0 rgba(255,255,255,.65);
        transition: transform .08s ease, box-shadow .2s ease, filter .2s ease;
    }
    .btn-forgot:hover{
        transform: translateY(-1px);
        box-shadow: 0 12px 22px rgba(0,0,0,.12), inset 0 1px 0 rgba(255,255,255,.7);
        filter: saturate(1.05);
        text-decoration: none;
    }
    .btn-forgot:active{
        transform: translateY(0);
        box-shadow: 0 8px 16px rgba(0,0,0,.08);
    }

    /* ===== Registration buttons ===== */
    .registration-buttons{
        margin: 22px auto 0;
        display:flex;
        gap:14px;
        flex-wrap:wrap;
        justify-content:center;
    }
    .btn{
        display:inline-flex;
        align-items:center;
        gap:10px;
        text-decoration:none;
        font-weight:900;
        padding:12px 18px;
        border-radius:9999px;
        box-shadow: 0 10px 18px rgba(0,0,0,.10);
        border: 1px solid transparent;
        transition: transform .12s ease, box-shadow .12s ease, background .15s ease, color .15s ease, border-color .15s ease;
        line-height:1;
        user-select:none;
        white-space: nowrap;
    }
    .btn:hover{ transform: translateY(-1px); box-shadow: 0 14px 24px rgba(0,0,0,.14); text-decoration:none; }
    .btn:active{ transform: translateY(0); box-shadow: 0 10px 18px rgba(0,0,0,.10); }

    /* Три стилі, але в межах фірмової палітри */
    .btn-student{ background: var(--brand-purple); color:#fff; border-color: rgba(255,255,255,.14); }
    .btn-student:hover{ background: var(--brand-purple-2); }

    .btn-teacher{ background: rgba(255,255,255,.92); color: var(--brand-purple); border-color: rgba(67,39,85,.18); }
    .btn-teacher:hover{ background: #fff; }

    .btn-parent{ background: rgba(163,232,211,.75); color: var(--brand-purple); border-color: rgba(67,39,85,.18); }
    .btn-parent:hover{ background: rgba(163,232,211,.88); }

    /* ===== Teacher/Admin journals (books) ===== */
    .course-block{ margin-top: 22px; text-align:left; }
    .course-title{ margin: 0 0 10px 4px; font-size: 18px; color: var(--brand-purple); font-weight: 900; }

    /* ===== РОЗМІР ЯК НА СТОРІНЦІ "ЖУРНАЛИ" ===== */
    .book-grid{
        display:grid;
        gap:12px;
        grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
        justify-items: stretch;
    }

    .book{
        width:100%;
        aspect-ratio: 2 / 3;
        border-radius: 16px;
        position:relative;
        overflow:hidden;
        cursor:pointer;
        transition: transform .18s ease, box-shadow .18s ease;
        padding: 12px; /* як у "Журнали" */
        background:
            radial-gradient(260px 180px at 30% 20%, rgba(163,232,211,.26), rgba(67,39,85,0) 60%),
            linear-gradient(180deg, var(--brand-purple), var(--brand-purple-2));
        box-shadow: 0 14px 26px rgba(67,39,85,.18);
        border: 1px solid rgba(255,255,255,.14);
    }
    .book:hover{
        transform: scale(1.02);
        box-shadow: 0 18px 32px rgba(67,39,85,.22);
    }

    .book-link{
        text-decoration:none;
        color:inherit;
        display:flex;
        width:100%;
        height:100%;
    }
    .book-link:hover{ text-decoration:none; }

    .book-cover{
        width:100%;
        height:100%;
        background: rgba(255,255,255,.94);
        display:flex;
        align-items:center;
        justify-content:center;
        text-align:center;
        border-radius: 14px;
        padding: 12px; /* як у "Журнали" */
        border: 1px solid rgba(67,39,85,.14);
        box-shadow: inset 0 1px 0 rgba(255,255,255,.55);
    }
    .book-cover p{
        color: var(--brand-purple);
        font-size: 14px; /* як у "Журнали" */
        font-weight: 1000;
        margin:0;
        line-height:1.25;
        overflow-wrap:anywhere;
        word-break:break-word;
        hyphens:auto;
    }

    /* ===== Student/Parent cards ===== */
    .diary-wrap{ margin-top: 20px; display:flex; justify-content:center; }
    .diary-card{
        width: min(520px, 92vw);
        border-radius: 18px;
        padding: 18px;
        text-align:left;
        background:
            radial-gradient(500px 220px at 10% 0%, rgba(163,232,211,.45), rgba(255,255,255,0) 65%),
            linear-gradient(135deg, #ffffff 0%, rgba(163,232,211,.20) 100%);
        box-shadow: 0 14px 26px rgba(0,0,0,.10);
        display:flex;
        gap:14px;
        align-items:center;
        border: 1px solid rgba(67,39,85,.12);
        transition: transform .15s ease, box-shadow .15s ease;
        text-decoration:none;
        color:inherit;
    }
    .diary-card:hover{
        transform: translateY(-2px);
        box-shadow: 0 18px 34px rgba(0,0,0,.14);
        text-decoration:none;
    }

    .diary-icon{
        width:72px;
        height:72px;
        flex:0 0 72px;
        border-radius: 14px;
        background: rgba(255,255,255,.92);
        display:grid;
        place-items:center;
        border: 1px solid rgba(67,39,85,.14);
        color: var(--brand-purple);
        box-shadow: 0 10px 18px rgba(0,0,0,.08);
    }
    .diary-icon svg{ width:48px; height:48px; }

    .diary-text h3{ margin:0 0 6px 0; font-size: 20px; color: var(--brand-purple); font-weight: 900; }
    .diary-text p{ margin:0; color: var(--muted); font-size: 14px; font-weight: 700; }

    .cta{
        margin-top: 10px;
        display:inline-block;
        background: var(--brand-purple);
        color:#fff;
        padding: 8px 12px;
        border-radius: 12px;
        font-weight: 900;
        box-shadow: 0 10px 18px rgba(67,39,85,.16);
    }

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

        /* як у "Журнали" на телефоні */
        .book-grid{
            grid-template-columns: repeat(auto-fill, minmax(130px, 1fr));
            gap:10px;
        }
        .book{ padding: 10px; }
        .book-cover p{ font-size: 13px; }

        .diary-icon{ width:64px; height:64px; flex-basis:64px; }
        .diary-icon svg{ width:42px; height:42px; }
        .btn{ width:100%; justify-content:center; }
        .course-block{ text-align:left; }
    }
  </style>
</head>
<body>

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

  <main class="home">
    <div class="home-card">
      <?php if (!$is_logged_in): ?>
        <div class="center">
          <h1>Електронний журнал</h1>
          <p class="lead">Ласкаво просимо! Увійдіть або зареєструйтесь.</p>
        </div>

        <div class="form-container">
          <div class="form-box">
            <h3>Вхід</h3>
            <?php if (!empty($error)): ?>
              <p style="color:#b91c1c;margin:8px 0 0 0;font-weight:900;"><?= htmlspecialchars($error, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'); ?></p>
            <?php endif; ?>
            <form method="POST" action="" autocomplete="on" novalidate>
              <input type="hidden" name="csrf_token" value="<?= htmlspecialchars($csrf_token, ENT_QUOTES, 'UTF-8'); ?>">
              <label for="login_email">Email:</label>
              <input type="email" name="email" id="login_email" autocomplete="username" required>
              <label for="login_password">Пароль:</label>
              <input type="password" name="password" id="login_password" autocomplete="current-password" required>
              <button type="submit" name="login">Увійти</button>

              <a class="btn-forgot" href="forgot_password.php" aria-label="Відновити пароль через email">Забув пароль?</a>
            </form>
          </div>
        </div>

        <div class="registration-buttons" aria-label="Варіанти реєстрації">
          <a href="register_student.php" class="btn btn-student">Реєстрація для студентів</a>
          <a href="register.php" class="btn btn-teacher">Реєстрація для викладачів</a>
          <a href="register_parent.php" class="btn btn-parent">Реєстрація для батьків</a>
        </div>

      <?php else: ?>
        <div class="center">
          <h1>Вітаємо, <?= htmlspecialchars($full_name, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'); ?>!</h1>
          <p class="lead">Це головна сторінка електронного журналу.</p>
        </div>

        <?php if ($user_role === 'student'): ?>
          <div class="center">
            <p class="lead">Перегляньте свій щоденник</p>
          </div>

          <div class="diary-wrap">
            <a class="diary-card" href="/journal/student_journal.php">
              <div class="diary-icon" aria-hidden="true">
                <svg viewBox="0 0 24 24" fill="none" role="img" aria-label="Щоденник">
                  <path d="M5 3h11a3 3 0 0 1 3 3v13a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2Z" stroke="currentColor" stroke-width="1.5"/>
                  <path d="M8 7h7M8 10h7M8 13h7M8 16h5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/>
                  <path d="M5 6h2v14H5" fill="currentColor" opacity=".12"/>
                </svg>
              </div>
              <div class="diary-text">
                <h3>Мій щоденник</h3>
                <p>Оцінки, предмети та розклад занять — все в одному місці.</p>
                <span class="cta">Відкрити</span>
              </div>
            </a>
          </div>

        <?php elseif (in_array($user_role, ['teacher','admin'], true)): ?>
          <?php for ($courseRow = 1; $courseRow <= 3; $courseRow++):
            $list = $journals_by_course[$courseRow] ?? [];
            if (empty($list)) continue; ?>
            <section class="course-block">
              <h3 class="course-title"><?= $courseRow; ?> курс</h3>
              <div class="book-grid">
                <?php foreach ($list as $g): ?>
                  <div class="book">
                    <a class="book-link" href="journal/view_journal.php?journal_id=<?= (int)$g['id']; ?>">
                      <div class="book-cover">
                        <p><?= htmlspecialchars($g['group_name'], ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'); ?></p>
                      </div>

                    </a>
                  </div>
                <?php endforeach; ?>
              </div>
            </section>
          <?php endfor; ?>

          <?php
          if (empty($journals_by_course[1]) && empty($journals_by_course[2]) && empty($journals_by_course[3])) {
              echo ($user_role === 'admin')
                  ? '<p class="lead center" style="margin-top:16px;">Групи відсутні.</p>'
                  : '<p class="lead center" style="margin-top:16px;">Ваші журнали будуть доступні після призначення викладачем або класним керівником.</p>';
          }
          ?>
        <?php elseif ($user_role === 'parent'): ?>
          <div class="diary-wrap">
            <a class="diary-card" href="/journal/father_journal.php">
              <div class="diary-icon" aria-hidden="true">
                <svg viewBox="0 0 24 24" fill="none" role="img" aria-label="Щоденник дитини">
                  <path d="M5 3h11a3 3 0 0 1 3 3v13a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a 2 2 0 0 1 2-2Z" stroke="currentColor" stroke-width="1.5"/>
                  <path d="M8 7h7M8 10h7M8 13h7M8 16h5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/>
                  <path d="M5 6h2v14H5" fill="currentColor" opacity=".12"/>
                </svg>
              </div>
              <div class="diary-text">
                <h3>Щоденник дитини</h3>
                <p>Оцінки ваших дітей у вибраних групах.</p>
                <span class="cta">Відкрити</span>
              </div>
            </a>
          </div>
        <?php endif; ?>
      <?php endif; ?>
    </div>
  </main>

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

</body>
</html>
