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

// Доступ тільки адміну
$role = strtolower(trim($_SESSION['role'] ?? ''));
if (!isset($_SESSION['user_id']) || $role !== 'admin') {
    header("Location: ../login.php");
    exit;
}

/* ===== Flash ===== */
function flash_set($type, $msg) { $_SESSION["flash_$type"] = $msg; }
function flash_get($type) {
    if (!empty($_SESSION["flash_$type"])) {
        $m = $_SESSION["flash_$type"];
        unset($_SESSION["flash_$type"]);
        return $m;
    }
    return null;
}

/* ===== CSRF ===== */
if (empty($_SESSION['csrf_token'])) {
    $_SESSION['csrf_token'] = bin2hex(random_bytes(24));
}
$csrf_token = $_SESSION['csrf_token'];

/* ===== POST (PRG) ===== */
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (!isset($_POST['csrf_token']) || !hash_equals($_SESSION['csrf_token'], $_POST['csrf_token'])) {
        flash_set('error', 'Невірний CSRF токен. Спробуйте ще раз.');
        header("Location: teachers.php");
        exit;
    }

    $action = $_POST['action'] ?? '';

    if ($action === 'update_role') {
        $user_id = (int)($_POST['user_id'] ?? 0);
        $new_role = $_POST['role'] ?? 'user';

        if (!in_array($new_role, ['user','teacher','admin'], true)) {
            flash_set('error', 'Невірна роль.');
            header("Location: teachers.php"); exit;
        }
        if ($user_id === (int)$_SESSION['user_id'] && $new_role !== 'admin') {
            flash_set('error', 'Неможливо змінити власну роль на не-адміністратора.');
            header("Location: teachers.php"); exit;
        }

        $stmt = $conn->prepare("UPDATE users SET role = ? WHERE id = ?");
        if (!$stmt) {
            flash_set('error', "Помилка підготовки запиту: " . $conn->error);
        } else {
            $stmt->bind_param("si", $new_role, $user_id);
            if ($stmt->execute()) flash_set('success', 'Роль успішно оновлена!');
            else flash_set('error', 'Помилка оновлення ролі: ' . $stmt->error);
            $stmt->close();
        }
        header("Location: teachers.php"); exit;
    }

    if ($action === 'delete_user') {
        $user_id = (int)($_POST['user_id'] ?? 0);

        if ($user_id === (int)$_SESSION['user_id']) {
            flash_set('error', 'Неможливо видалити власний обліковий запис.');
            header("Location: teachers.php"); exit;
        }

        $chk = $conn->prepare("SELECT role FROM users WHERE id = ?");
        $chk->bind_param("i", $user_id);
        $chk->execute();
        $r = $chk->get_result()->fetch_assoc();
        $chk->close();

        if ($r && $r['role'] === 'admin') {
            flash_set('error', 'Неможливо видалити адміністратора.');
            header("Location: teachers.php"); exit;
        }

        $stmt = $conn->prepare("DELETE FROM users WHERE id = ?");
        if (!$stmt) {
            flash_set('error', "Помилка підготовки запиту: " . $conn->error);
        } else {
            $stmt->bind_param("i", $user_id);
            if ($stmt->execute()) flash_set('success', 'Користувач успішно видалений!');
            else flash_set('error', 'Помилка видалення користувача: ' . $stmt->error);
            $stmt->close();
        }
        header("Location: teachers.php"); exit;
    }

    flash_set('error', 'Невідома дія.');
    header("Location: teachers.php"); exit;
}

/* ===== GET фільтри ===== */
$search = trim((string)($_GET['q'] ?? ''));
$roleFilter = trim((string)($_GET['role'] ?? ''));

/* ===== Вибірка користувачів ===== */
$sql = "SELECT id, username, full_name, email, role, website_link, website_links, is_verified, created_at
        FROM users";
$where = [];
$params = [];
$types = "";

if ($search !== '') {
    $where[] = "(username LIKE CONCAT('%', ?, '%')
              OR full_name LIKE CONCAT('%', ?, '%')
              OR email LIKE CONCAT('%', ?, '%'))";
    $types .= "sss";
    $params[] = $search; $params[] = $search; $params[] = $search;
}
if ($roleFilter !== '' && in_array($roleFilter, ['user','teacher','admin'], true)) {
    $where[] = "role = ?";
    $types .= "s";
    $params[] = $roleFilter;
}
if ($where) {
    $sql .= " WHERE " . implode(" AND ", $where);
}
$sql .= " ORDER BY id DESC";

$stmt = $conn->prepare($sql);
if ($params) $stmt->bind_param($types, ...$params);
$stmt->execute();
$res = $stmt->get_result();

$users = [];
while ($row = $res->fetch_assoc()) $users[] = $row;
$stmt->close();

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

/* ===== header.php vars ===== */
$siteName  = 'Розклад занять';
$pageTitle = 'Викладачі';
$pageCss   = [
    'https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css',
    '/css/admin.css?v=4',
    '/css/admin_teachers.css?v=1'
];

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

<style>
/* ===== Виправлення колонки ПІБ + компактні дії ===== */
.admin-users-table{ table-layout:auto; }
.admin-users-table .col-id{ width:60px; }
.admin-users-table .col-profile{ width:150px; }
.admin-users-table .col-role{ width:110px; }
.admin-users-table .col-actions{ width:320px; }
.admin-users-table .col-name{ min-width:280px; }

@media (max-width: 1200px){
  .admin-users-table .col-actions{ width:280px; }
  .admin-users-table .col-name{ min-width:240px; }
}
@media (max-width: 992px){
  .admin-users-table .col-actions{ width:260px; }
  .admin-users-table .col-name{ min-width:220px; }
}
@media (max-width: 576px){
  .admin-users-table .col-name{ min-width:170px; }
}

.admin-users-table td.user-name-cell{
  word-break: normal;
  overflow-wrap: break-word;
  white-space: normal;
}
.admin-users-table td.user-name-cell a{
  display:inline-block;
  max-width:100%;
  text-decoration:none;
}

.admin-actions{
  display:flex;
  align-items:center;
  justify-content:flex-end;
  gap:12px;
  flex-wrap:wrap;
}
.admin-role-form{
  display:flex;
  align-items:center;
  justify-content:flex-end;
  gap:10px;
  flex-wrap:wrap;
}
.admin-role-form .form-select{ min-width:180px; }
@media (max-width: 992px){
  .admin-role-form .form-select{ min-width:160px; }
}
</style>

<main class="page">
  <div class="kp-container">
    <div class="container admin-wrap">

      <h1 class="admin-title"><?= htmlspecialchars((string)$pageTitle, ENT_QUOTES, 'UTF-8') ?></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 ($m = flash_get('success')): ?>
        <div class="alert alert-success"><?= htmlspecialchars((string)$m, ENT_QUOTES, 'UTF-8') ?></div>
      <?php endif; ?>
      <?php if ($m = flash_get('error')): ?>
        <div class="alert alert-danger"><?= htmlspecialchars((string)$m, ENT_QUOTES, 'UTF-8') ?></div>
      <?php endif; ?>

      <!-- Блок фільтрів -->
      <section class="card-block">
        <h2 class="block-title">Пошук та фільтр</h2>
        <form class="row g-2 g-md-3 align-items-end" method="get" action="teachers.php">
          <div class="col-12 col-md-6">
            <label for="q" class="form-label">Пошук (логін, ПІБ або email)</label>
            <input type="text" id="q" name="q" class="form-control" value="<?= htmlspecialchars($search, ENT_QUOTES, 'UTF-8') ?>">
          </div>
          <div class="col-6 col-md-3">
            <label for="role" class="form-label">Роль</label>
            <select id="role" name="role" class="form-select">
              <option value="">Усі</option>
              <option value="user"    <?= $roleFilter==='user'?'selected':''; ?>>Користувач</option>
              <option value="teacher" <?= $roleFilter==='teacher'?'selected':''; ?>>Викладач</option>
              <option value="admin"   <?= $roleFilter==='admin'?'selected':''; ?>>Адміністратор</option>
            </select>
          </div>
          <div class="col-6 col-md-3">
            <button class="btn btn-primary w-100" type="submit">Застосувати</button>
          </div>
        </form>
      </section>

      <!-- Список користувачів -->
      <section class="card-block">
        <h2 class="block-title">Користувачі</h2>

        <div class="table-responsive">
          <table class="table table-striped table-hover schedule-table align-middle admin-users-table">
            <thead class="table-light">
              <tr>
                <th class="col-id">ID</th>
                <th class="col-name">ПІБ</th>
                <th class="d-none d-md-table-cell">Email</th>
                <th class="col-profile">Профіль</th>
                <th class="col-role">Роль</th>
                <th class="text-end col-actions">Дії</th>
              </tr>
            </thead>
            <tbody>
            <?php if (!$users): ?>
              <tr><td colspan="6" class="text-center text-muted">Немає користувачів.</td></tr>
            <?php else: foreach ($users as $u):
                $profileUrl = "/users/teacher_profile.php?id=" . (int)$u['id'];
                $fullName = ((string)($u['full_name'] ?? '') !== '') ? (string)$u['full_name'] : 'Не вказано';
            ?>
              <tr>
                <td><?= (int)$u['id'] ?></td>

                <td class="user-name-cell">
                  <a href="<?= htmlspecialchars($profileUrl, ENT_QUOTES, 'UTF-8') ?>" target="_blank" rel="noopener">
                    <?= htmlspecialchars($fullName, ENT_QUOTES, 'UTF-8') ?>
                  </a>
                  <div class="d-md-none text-muted small mt-1">
                    <?= htmlspecialchars((string)($u['email'] ?: 'Не вказано'), ENT_QUOTES, 'UTF-8') ?>
                  </div>
                </td>

                <td class="d-none d-md-table-cell">
                  <?= htmlspecialchars((string)($u['email'] ?: 'Не вказано'), ENT_QUOTES, 'UTF-8') ?>
                </td>

                <td>
                  <div class="d-grid gap-2">
                    <a href="<?= htmlspecialchars($profileUrl, ENT_QUOTES, 'UTF-8') ?>" class="btn btn-outline-primary btn-sm" target="_blank" rel="noopener">Відкрити</a>
                    <a href="/admin/edit_teacher_profile.php?id=<?= (int)$u['id'] ?>" class="btn btn-outline-secondary btn-sm">Редагувати</a>
                  </div>
                </td>

                <td>
                  <span class="badge text-bg-secondary"><?= htmlspecialchars((string)($u['role'] ?: 'user'), ENT_QUOTES, 'UTF-8') ?></span>
                </td>

                <td class="text-end">
                  <div class="admin-actions">
                    <!-- Оновлення ролі -->
                    <form method="post" class="admin-role-form">
                      <input type="hidden" name="csrf_token" value="<?= htmlspecialchars($csrf_token, ENT_QUOTES, 'UTF-8') ?>">
                      <input type="hidden" name="action" value="update_role">
                      <input type="hidden" name="user_id" value="<?= (int)$u['id'] ?>">

                      <select name="role" class="form-select form-select-sm">
                        <option value="user"    <?= $u['role']==='user'?'selected':''; ?>>Користувач</option>
                        <option value="teacher" <?= $u['role']==='teacher'?'selected':''; ?>>Викладач</option>
                        <option value="admin"   <?= $u['role']==='admin'?'selected':''; ?>>Адміністратор</option>
                      </select>

                      <button type="submit" class="btn btn-primary btn-sm">Зберегти</button>
                    </form>

                    <!-- Видалення -->
                    <?php if ((int)$u['id'] !== (int)$_SESSION['user_id'] && $u['role'] !== 'admin'): ?>
                      <form method="post" onsubmit="return confirm('Видалити цього користувача?');">
                        <input type="hidden" name="csrf_token" value="<?= htmlspecialchars($csrf_token, ENT_QUOTES, 'UTF-8') ?>">
                        <input type="hidden" name="action" value="delete_user">
                        <input type="hidden" name="user_id" value="<?= (int)$u['id'] ?>">
                        <button type="submit" class="btn btn-danger btn-sm">Видалити</button>
                      </form>
                    <?php else: ?>
                      <button class="btn btn-outline-secondary btn-sm" disabled>Видалити</button>
                    <?php endif; ?>
                  </div>
                </td>
              </tr>
            <?php endforeach; endif; ?>
            </tbody>
          </table>
        </div>
      </section>

    </div>
  </div>
</main>

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

</body>
</html>
