<?php
session_start();
include '../includes/db_config.php';

// ✅ Дозволяємо доступ і admin, і teacher
$role = strtolower(trim($_SESSION['role'] ?? ''));
if (!isset($_SESSION['user_id']) || !in_array($role, ['admin','teacher'], true)) {
    header("Location: ../login.php");
    exit;
}

// Для повідомлень на сторінці
$flash_success = null;
$flash_error = null;

/* ====== ДОДАВАННЯ ГРУПИ ====== */
if (isset($_POST['add_group'])) {
    $name = trim($_POST['group_name'] ?? '');
    if ($name !== '') {
        $sql = "INSERT INTO `groups` (id, name) VALUES (NULL, ?)";
        $stmt = $conn->prepare($sql);
        if (!$stmt) { die("Помилка підготовки запиту: " . $conn->error); }
        $stmt->bind_param("s", $name);
        if (!$stmt->execute()) {
            $flash_error = "Помилка додавання групи: " . $stmt->error;
        }
        $stmt->close();
    }
    if (!$flash_error) {
        header("Location: dashboard.php");
        exit;
    }
}

/* ====== ВИДАЛЕННЯ ГРУПИ ====== */
if (isset($_POST['delete_group'])) {
    $group_id = (int)($_POST['group_id'] ?? 0);
    if ($group_id > 0) {
        $sql = "DELETE FROM `groups` WHERE id = ?";
        $stmt = $conn->prepare($sql);
        if (!$stmt) { die("Помилка підготовки запиту: " . $conn->error); }
        $stmt->bind_param("i", $group_id);
        if (!$stmt->execute()) {
            $flash_error = "Помилка видалення групи: " . $stmt->error;
        }
        $stmt->close();
    }
    if (!$flash_error) {
        header("Location: dashboard.php");
        exit;
    }
}

/* ====== ОНОВЛЕННЯ НАЗВИ ГРУПИ ====== */
if (isset($_POST['update_group_name'])) {
    $group_id = (int)($_POST['group_id'] ?? 0);
    $new_name = trim($_POST['new_group_name'] ?? '');
    if ($group_id > 0 && $new_name !== '') {
        $sql = "UPDATE `groups` SET name = ? WHERE id = ?";
        $stmt = $conn->prepare($sql);
        if (!$stmt) { die("Помилка підготовки запиту: " . $conn->error); }
        $stmt->bind_param("si", $new_name, $group_id);
        if (!$stmt->execute()) {
            $flash_error = "Помилка оновлення назви групи: " . $stmt->error;
        }
        $stmt->close();
    }
    if (!$flash_error) {
        header("Location: dashboard.php");
        exit;
    }
}

/* ====== ОНОВЛЕННЯ ПОРЯДКУ ГРУП (bulk) ====== */
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['update_positions'])) {
    $positions = $_POST['position'] ?? [];
    foreach ($positions as $group_id => $new_position) {
        $gid = (int)$group_id;
        $pos = (int)$new_position;
        if ($gid > 0) {
            $sql_update = "UPDATE `groups` SET position = ? WHERE id = ?";
            $stmt = $conn->prepare($sql_update);
            if ($stmt) {
                $stmt->bind_param("ii", $pos, $gid);
                $stmt->execute();
                $stmt->close();
            }
        }
    }
    header("Location: dashboard.php");
    exit;
}

/* ====== ОНОВЛЕННЯ НОВИН ====== */
if (isset($_POST['update_news'])) {
    $new_content = $_POST['news_content'] ?? '';

    $conn->begin_transaction();
    try {
        $check = $conn->query("SELECT id FROM `news` ORDER BY updated_at DESC, id DESC LIMIT 1");
        if ($check && $check->num_rows > 0) {
            $row = $check->fetch_assoc();
            $nid = (int)$row['id'];
            $stmt = $conn->prepare("UPDATE `news` SET `content` = ?, `updated_at` = CURRENT_TIMESTAMP WHERE id = ?");
            if (!$stmt) { throw new Exception("Помилка підготовки UPDATE: " . $conn->error); }
            $stmt->bind_param("si", $new_content, $nid);
            if (!$stmt->execute()) { throw new Exception("Помилка виконання UPDATE: " . $stmt->error); }
            $stmt->close();
        } else {
            $stmt = $conn->prepare("INSERT INTO `news` (`content`, `updated_at`) VALUES (?, CURRENT_TIMESTAMP)");
            if (!$stmt) { throw new Exception("Помилка підготовки INSERT: " . $conn->error); }
            $stmt->bind_param("s", $new_content);
            if (!$stmt->execute()) { throw new Exception("Помилка виконання INSERT: " . $stmt->error); }
            $stmt->close();
        }
        $conn->commit();
    } catch (Throwable $e) {
        $conn->rollback();
        $flash_error = "Помилка оновлення новин: " . $e->getMessage();
    }

    if (!$flash_error) {
        header("Location: dashboard.php");
        exit;
    }
}

/* ====== ДАНІ ДЛЯ ВІДОБРАЖЕННЯ ====== */
$sql = "SELECT id, name, position FROM `groups` ORDER BY position";
$stmt = $conn->prepare($sql);
$stmt->execute();
$groups = $stmt->get_result();
$stmt->close();

$news_sql = "SELECT content FROM `news` ORDER BY updated_at DESC LIMIT 1";
$news_result = $conn->query($news_sql);
$news_content = ($news_result && $news_result->num_rows > 0)
    ? ($news_result->fetch_assoc()['content'] ?? '')
    : '';

$db_size_mb = null;
$db_size_query = "SELECT SUM(data_length + index_length) AS size FROM information_schema.tables WHERE table_schema = DATABASE()";
if ($res = $conn->query($db_size_query)) {
    if ($row = $res->fetch_assoc()) {
        $db_size_mb = $row['size'] ? (float)$row['size'] / 1024 / 1024 : null;
    }
    $res->free();
}
$php_version = phpversion();

$conn->close();

// Хелпер активної вкладки
function adminActiveTab(string $file): string {
    $self = basename($_SERVER['PHP_SELF']);
    return $self === $file ? ' class="nav-link active"' : ' class="nav-link"';
}

/* ===== підготовка header.php ===== */
$siteName  = 'Розклад занять';
$pageTitle = 'Панель керування';
$pageCss   = [
    'https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css',
    '/css/admin.css?v=4'
];

include '../includes/header.php';
?>

<main class="page">
  <div class="kp-container">
    <div class="container admin-wrap">
      <h1 class="admin-title">Панель керування</h1>

      <!-- Уніфіковані вкладки -->
      <ul class="nav nav-tabs mb-4 admin-tabs">
        <li class="nav-item"><a<?=adminActiveTab('dashboard.php')?> href="dashboard.php">Головна</a></li>
        <li class="nav-item"><a<?=adminActiveTab('teachers.php')?> href="teachers.php">Викладачі</a></li>
        <li class="nav-item"><a<?=adminActiveTab('dashboard_consultations.php')?> href="dashboard_consultations.php">Консультації</a></li>
        <li class="nav-item"><a<?=adminActiveTab('pdf_archives.php')?> href="pdf_archives.php">PDF-архіви</a></li>
      </ul>

      <?php if ($flash_success): ?>
        <div class="alert alert-success"><?= htmlspecialchars($flash_success, ENT_QUOTES, 'UTF-8') ?></div>
      <?php endif; ?>
      <?php if ($flash_error): ?>
        <div class="alert alert-danger"><?= htmlspecialchars($flash_error, ENT_QUOTES, 'UTF-8') ?></div>
      <?php endif; ?>

      <!-- Додати групу -->
      <section class="card-block">
        <h2 class="block-title">Додати групу</h2>
        <form method="POST" class="row g-2 g-md-3 align-items-end">
          <div class="col-12 col-md-6">
            <label for="group_name" class="form-label">Назва групи</label>
            <input type="text" id="group_name" name="group_name" class="form-control" required>
          </div>
          <div class="col-12 col-md-2">
            <button type="submit" name="add_group" class="btn btn-primary w-100">Додати</button>
          </div>
        </form>
      </section>

      <!-- Існуючі групи -->
      <section class="card-block">
        <h2 class="block-title">Існуючі групи</h2>

        <!-- Форма для bulk-оновлення порядку -->
        <form method="POST" id="positionForm"></form>

        <div class="table-responsive">
          <table class="table table-striped table-hover schedule-table align-middle">
            <thead>
              <tr>
                <th style="width:140px;">Порядок</th>
                <th>Назва</th>
                <th style="width:360px;">Редагувати назву</th>
                <th style="width:300px;">Дії</th>
              </tr>
            </thead>
            <tbody>
            <?php if ($groups && $groups->num_rows > 0): ?>
              <?php while ($group = $groups->fetch_assoc()): ?>
                <tr>
                  <td>
                    <input type="number"
                           name="position[<?= (int)$group['id'] ?>]"
                           value="<?= htmlspecialchars((string)$group['position'], ENT_QUOTES, 'UTF-8') ?>"
                           class="form-control"
                           min="1"
                           style="max-width:140px"
                           form="positionForm">
                  </td>
                  <td class="text-break"><?= htmlspecialchars((string)$group['name'], ENT_QUOTES, 'UTF-8') ?></td>
                  <td>
                    <form method="POST" class="d-flex gap-2 flex-column flex-sm-row">
                      <input type="hidden" name="group_id" value="<?= (int)$group['id'] ?>">
                      <input type="text" name="new_group_name" value="<?= htmlspecialchars((string)$group['name'], ENT_QUOTES, 'UTF-8') ?>" class="form-control">
                      <button type="submit" name="update_group_name" class="btn btn-primary btn-sm">Зберегти</button>
                    </form>
                  </td>
                  <td class="actions d-flex flex-wrap gap-2">
                    <a href="dashboard_schedule.php?group_id=<?= (int)$group['id'] ?>" class="btn btn-primary btn-sm">Розклад</a>
                    <a href="../rozklad/consultations.php?group_id=<?= (int)$group['id'] ?>" class="btn btn-outline-primary btn-sm">Консультації</a>
                    <form method="POST" class="d-inline">
                      <input type="hidden" name="group_id" value="<?= (int)$group['id'] ?>">
                      <button type="submit" name="delete_group" class="btn btn-danger btn-sm"
                              onclick="return confirm('Видалити цю групу?')">Видалити</button>
                    </form>
                  </td>
                </tr>
              <?php endwhile; ?>
            <?php else: ?>
              <tr><td colspan="4" class="text-center text-muted">Немає груп.</td></tr>
            <?php endif; ?>
            </tbody>
          </table>
        </div>

        <div class="mt-2 d-flex flex-column flex-sm-row gap-2">
          <button type="submit" name="update_positions" class="btn btn-primary" form="positionForm">Оновити порядок</button>
          <a class="btn btn-outline-secondary" href="pdf_archives.php">PDF-архіви</a>
        </div>
      </section>

      <!-- Новини -->
      <section class="card-block">
        <h2 class="block-title">Останні новини</h2>
        <form method="POST" class="row g-2 g-md-3">
          <div class="col-12 col-md-8">
            <label for="news_content" class="form-label">Текст новин</label>
            <textarea id="news_content" name="news_content" class="form-control" rows="3" required><?= htmlspecialchars((string)$news_content, ENT_QUOTES, 'UTF-8') ?></textarea>
          </div>
          <div class="col-12 col-md-2 align-self-end">
            <button type="submit" name="update_news" class="btn btn-primary w-100">Оновити</button>
          </div>
        </form>
      </section>

      <!-- Інфо -->
      <section class="card-block">
        <h2 class="block-title">Додаткова інформація</h2>
        <p>Розмір бази даних:
          <?= $db_size_mb !== null ? number_format($db_size_mb, 2) . ' MB' : 'Невідомо' ?>
        </p>
        <p>Версія PHP: <?= htmlspecialchars((string)$php_version, ENT_QUOTES, 'UTF-8') ?></p>
        <p>Версія сайту: 3.5</p>
        <p>Розробник: CMS Rozklad</p>
      </section>
    </div>
  </div>
</main>

<?php include '../includes/footer.php'; ?>

</body>
</html>
