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

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

// Доступ: адмін або викладач
if (!isset($_SESSION['user_id']) || !in_array($_SESSION['role'] ?? '', ['admin','teacher'], true)) {
    header("Location: ../index.php");
    exit();
}

$user_id   = (int)($_SESSION['user_id'] ?? 0);
$full_name = $_SESSION['full_name'] ?? 'Адміністратор';

// Поточний файл (для підсвічування у хедері, якщо потрібно)
$current_file = basename($_SERVER['PHP_SELF'] ?? 'admin_teachers.php');

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

/* ===== Надсилання листа активації ===== */
function send_activation_email(string $toEmail, string $toName, string $code): array {
    // Повертає: ['ok'=>bool, 'err'=>string]
    $cfgPath = __DIR__ . '/../includes/config_mail.php';
    $cfg = [];
    if (is_file($cfgPath)) {
        $tmp = require $cfgPath;
        if (is_array($tmp)) $cfg = $tmp;
    }

    // Спробуємо “вгадати” ключі конфігурації (щоб працювало і з різними варіантами config_mail.php)
    $host       = (string)($cfg['host'] ?? $cfg['smtp_host'] ?? '');
    $username   = (string)($cfg['username'] ?? $cfg['smtp_user'] ?? $cfg['user'] ?? '');
    $password   = (string)($cfg['password'] ?? $cfg['smtp_pass'] ?? $cfg['pass'] ?? '');
    $port       = (int)($cfg['port'] ?? $cfg['smtp_port'] ?? 587);
    $secureRaw  = (string)($cfg['secure'] ?? $cfg['encryption'] ?? $cfg['smtp_secure'] ?? '');
    $fromEmail  = (string)($cfg['from_email'] ?? $cfg['from'] ?? $username);
    $fromName   = (string)($cfg['from_name'] ?? $cfg['app_name'] ?? 'Електронний журнал');

    $secure = '';
    if (in_array(strtolower($secureRaw), ['tls','ssl','starttls'], true)) {
        $secure = strtolower($secureRaw) === 'starttls' ? 'tls' : strtolower($secureRaw);
    } else {
        // дефолт: tls для 587
        $secure = ($port === 465) ? 'ssl' : 'tls';
    }

    if ($host === '' || $username === '' || $password === '' || $fromEmail === '') {
        return ['ok' => false, 'err' => 'Не налаштовано SMTP (перевірте includes/config_mail.php).'];
    }

    // Абсолютне посилання на підтвердження
    $scheme = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https' : 'http';
    $hostHttp = (string)($_SERVER['HTTP_HOST'] ?? '');
    if ($hostHttp === '') {
        return ['ok' => false, 'err' => 'Неможливо визначити домен (HTTP_HOST).'];
    }
    $activateUrl = $scheme . '://' . $hostHttp . '/verify_email.php?code=' . urlencode($code) . '&email=' . urlencode($toEmail);

    // PHPMailer
    $base = __DIR__ . '/../includes/PHPMailer/src/';
    $exFile  = $base . 'Exception.php';
    $phFile  = $base . 'PHPMailer.php';
    $smFile  = $base . 'SMTP.php';

    if (!is_file($exFile) || !is_file($phFile) || !is_file($smFile)) {
        return ['ok' => false, 'err' => 'PHPMailer не знайдено в includes/PHPMailer/src/.'];
    }

    require_once $exFile;
    require_once $phFile;
    require_once $smFile;

    $subject = 'Підтвердження пошти (активація акаунта)';

    $html = '
        <div style="font-family:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Arial; line-height:1.45; color:#111827;">
            <h2 style="margin:0 0 8px; font-size:18px;">Підтвердіть вашу пошту</h2>
            <p style="margin:0 0 12px;">Вітаємо, <b>' . h($toName) . '</b>! Натисніть кнопку нижче, щоб активувати акаунт.</p>
            <p style="margin:0 0 14px;">
                <a href="' . h($activateUrl) . '" style="display:inline-block; padding:10px 14px; border-radius:10px; background:#2563eb; color:#fff; text-decoration:none; font-weight:700;">
                    Активувати акаунт
                </a>
            </p>
            <p style="margin:0 0 10px; color:#6b7280; font-size:13px;">Якщо кнопка не працює — скопіюйте та відкрийте посилання:</p>
            <p style="margin:0; font-size:13px; word-break:break-all;">
                <a href="' . h($activateUrl) . '">' . h($activateUrl) . '</a>
            </p>
        </div>
    ';

    try {
        $mail = new PHPMailer\PHPMailer\PHPMailer(true);
        $mail->CharSet = 'UTF-8';
        $mail->isSMTP();
        $mail->Host       = $host;
        $mail->SMTPAuth   = true;
        $mail->Username   = $username;
        $mail->Password   = $password;
        $mail->Port       = $port;
        $mail->SMTPSecure = $secure;

        $mail->setFrom($fromEmail, $fromName);
        $mail->addAddress($toEmail, $toName);

        $mail->isHTML(true);
        $mail->Subject = $subject;
        $mail->Body    = $html;

        $mail->send();
        return ['ok' => true, 'err' => ''];
    } catch (Throwable $e) {
        return ['ok' => false, 'err' => 'Помилка відправки: ' . $e->getMessage()];
    }
}

// ===== Обробка POST (видалення / повторна активація)
$flash = ['type' => '', 'msg' => ''];

if (($_SERVER['REQUEST_METHOD'] ?? '') === 'POST') {
    $action = (string)($_POST['action'] ?? '');

    // ==== Видалення (лише адміни)
    if ($action === 'delete_user') {
        if (($_SESSION['role'] ?? '') !== 'admin') {
            $flash = ['type' => 'error', 'msg' => 'Недостатньо прав для видалення.'];
        } elseif (!hash_equals($CSRF, $_POST['csrf'] ?? '')) {
            $flash = ['type' => 'error', 'msg' => 'Помилка безпеки (CSRF). Оновіть сторінку.'];
        } else {
            $delete_id = (int)($_POST['user_id'] ?? 0);
            if ($delete_id <= 0) {
                $flash = ['type' => 'error', 'msg' => 'Невірний ідентифікатор користувача.'];
            } else {
                if ($role_q = $conn->prepare("SELECT role, full_name FROM users WHERE id = ?")) {
                    $role_q->bind_param("i", $delete_id);
                    $role_q->execute();
                    $role_r = $role_q->get_result();
                    if ($role_r->num_rows === 0) {
                        $flash = ['type' => 'error', 'msg' => 'Користувача не знайдено.'];
                    } else {
                        $row = $role_r->fetch_assoc();

                        // ЗАБОРОНА: не можна видалити адміністратора
                        if (($row['role'] ?? '') === 'admin') {
                            $flash = ['type' => 'error', 'msg' => 'Неможливо видалити адміністратора.'];
                        } else {
                            if ($del = $conn->prepare("DELETE FROM users WHERE id = ?")) {
                                $del->bind_param("i", $delete_id);
                                if ($del->execute()) {
                                    $flash = [
                                        'type' => 'success',
                                        'msg'  => 'Користувача «' . h($row['full_name'] ?? '') . '» видалено.'
                                    ];
                                } else {
                                    $flash = ['type' => 'error', 'msg' => 'Не вдалося видалити користувача.'];
                                }
                                $del->close();
                            } else {
                                $flash = ['type' => 'error', 'msg' => 'Помилка підготовки запиту на видалення.'];
                            }
                        }
                    }
                    $role_q->close();
                } else {
                    $flash = ['type' => 'error', 'msg' => 'Помилка підготовки запиту.'];
                }
            }
        }
    }

    // ==== Повторно надіслати лист активації (лише адміни)
    if ($action === 'resend_activation') {
        if (($_SESSION['role'] ?? '') !== 'admin') {
            $flash = ['type' => 'error', 'msg' => 'Недостатньо прав для повторної активації.'];
        } elseif (!hash_equals($CSRF, $_POST['csrf'] ?? '')) {
            $flash = ['type' => 'error', 'msg' => 'Помилка безпеки (CSRF). Оновіть сторінку.'];
        } else {
            $uid = (int)($_POST['user_id'] ?? 0);
            if ($uid <= 0) {
                $flash = ['type' => 'error', 'msg' => 'Невірний ідентифікатор користувача.'];
            } else {
                // Беремо користувача (лише admin/teacher як у списку)
                if ($st = $conn->prepare("SELECT id, full_name, email, role, active FROM users WHERE id = ? AND role IN ('admin','teacher') LIMIT 1")) {
                    $st->bind_param("i", $uid);
                    $st->execute();
                    $rs = $st->get_result();
                    $u = $rs ? $rs->fetch_assoc() : null;
                    $st->close();

                    if (!$u) {
                        $flash = ['type' => 'error', 'msg' => 'Користувача не знайдено.'];
                    } else {
                        $isActive = (int)($u['active'] ?? 0) === 1;

                        if ($isActive) {
                            $flash = ['type' => 'error', 'msg' => 'Акаунт уже активовано — лист не потрібен.'];
                        } else {
                            $code = bin2hex(random_bytes(16)); // 32 символи

                            if ($upd = $conn->prepare("UPDATE users SET activation_code = ?, active = 0 WHERE id = ? LIMIT 1")) {
                                $upd->bind_param("si", $code, $uid);
                                $okUpd = $upd->execute();
                                $upd->close();

                                if (!$okUpd) {
                                    $flash = ['type' => 'error', 'msg' => 'Не вдалося оновити код активації в БД.'];
                                } else {
                                    $send = send_activation_email((string)$u['email'], (string)$u['full_name'], $code);
                                    if (!empty($send['ok'])) {
                                        $flash = ['type' => 'success', 'msg' => 'Лист активації повторно надіслано користувачу «' . h((string)$u['full_name']) . '».'];
                                    } else {
                                        $flash = ['type' => 'error', 'msg' => (string)($send['err'] ?? 'Не вдалося надіслати лист активації.')];
                                    }
                                }
                            } else {
                                $flash = ['type' => 'error', 'msg' => 'Помилка підготовки запиту на оновлення коду.'];
                            }
                        }
                    }
                } else {
                    $flash = ['type' => 'error', 'msg' => 'Помилка підготовки запиту.'];
                }
            }
        }
    }
}

// ===== Отримання списку адмінів та викладачів (адміни зверху)
$users = [];
$sql = "
    SELECT u.id, u.full_name, u.email, u.role, u.active
    FROM users u
    WHERE u.role IN ('admin','teacher')
    ORDER BY FIELD(u.role,'admin','teacher'), u.full_name ASC
";
$res = $conn->query($sql);
if ($res) {
    while ($r = $res->fetch_assoc()) {
        $users[] = $r;
    }
}
?>
<!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, viewport-fit=cover">
    <title>Викладачі — Адмінпанель</title>
    <link rel="stylesheet" href="../assets/css/style.css">
    <style>
        :root{
            /* палітра КПКІТП (фіолетовий + м’ятний) */
            --mint: #a0e0d0;
            --mint-2:#d9f6ef;
            --plum:#402050;
            --plum-2:#2f173b;

            --bg: var(--mint);
            --card: rgba(255,255,255,.92);
            --text:#2a0f3e;
            --muted: rgba(42,15,62,.72);

            --brand: var(--plum);
            --brand-hover: var(--plum-2);

            --active:#facc15; --active-border:#eab308;

            --radius:14px;
            --shadow:0 10px 28px rgba(20,20,20,.10);
            --border: rgba(64,32,80,.14);

            --danger:#b42318; --danger-hover:#7a1a12;

            --ok:#16a34a; --ok-bg:#dcfce7; --ok-br:#86efac;
            --warn:#b45309; --warn-bg:#fef3c7; --warn-br:#fcd34d;
        }
        *{box-sizing:border-box}
        body{
            margin:0;
            color:var(--text);
            font-family:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,"Noto Sans","Helvetica Neue",Arial;
            background:
                radial-gradient(1200px 600px at 10% -10%, rgba(255,255,255,.55), rgba(255,255,255,0) 60%),
                radial-gradient(900px 520px at 110% 10%, rgba(64,32,80,.12), rgba(64,32,80,0) 55%),
                linear-gradient(180deg, var(--mint) 0%, #c9f2e9 55%, #eefbf8 100%);
        }

        /* ===== Контейнер ===== */
        .container{ width:100%; max-width:980px; padding:16px; margin:0 auto; }
        .card{
            background:var(--card);
            border-radius:var(--radius);
            box-shadow:var(--shadow);
            padding:18px;
            border:1px solid var(--border);
            backdrop-filter: blur(6px);
        }
        h1{ margin:0 0 8px; font-size:22px; text-align:center; }
        .lead{ color:var(--muted); font-size:14px; text-align:center; margin:0 0 14px; }

        /* ===== Tabs (як у admin/dashboard.php) ===== */
        .admin-tabs{
            display:flex;
            gap:10px;
            flex-wrap:wrap;
            align-items:center;
            justify-content:center;
            margin: 2px 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(--text);
            background: rgba(67,40,85,.08);
            border: 1px solid rgba(67,40,85,.18);
            box-shadow: 0 10px 22px rgba(67,40,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(160,232,208,.45);
            border-color: rgba(67,40,85,.22);
            box-shadow: 0 14px 28px rgba(67,40,85,.10);
        }
        .admin-tabs a.active{
            color:#fff;
            background: linear-gradient(135deg, var(--plum) 0%, #4b2a61 55%, rgba(160,232,208,.95) 120%);
            border-color: rgba(255,255,255,.22);
            box-shadow: 0 18px 40px rgba(67,40,85,.18);
        }

        /* ===== Список користувачів (мобіль-first) ===== */
        .list{ display:grid; gap:10px; }
        .row{
            display:grid;
            grid-template-columns: auto 1fr;
            grid-template-areas:
                "role info"
                "actions actions";
            gap:10px;
            padding:12px;
            border:1px solid var(--border);
            border-radius:12px;
            background:rgba(255,255,255,.90);
        }

        .pills{
            grid-area: role;
            display:flex;
            flex-direction:column;
            gap:6px;
            align-self:start;
        }

        .role-pill,
        .status-pill{
            font-size:12px; font-weight:900; padding:6px 10px; border-radius:999px;
            color:var(--text); background:rgba(64,32,80,.06); border:1px solid rgba(64,32,80,.16);
            min-width:110px; text-align:center;
        }

        .role-pill[data-role="admin"]{ background:rgba(250,204,21,.26); border-color:rgba(234,179,8,.45); }

        .status-pill[data-active="1"]{
            background:var(--ok-bg);
            border-color:var(--ok-br);
            color:#065f46;
        }
        .status-pill[data-active="0"]{
            background:var(--warn-bg);
            border-color:var(--warn-br);
            color:#7c2d12;
        }

        .info{
            grid-area: info;
            min-width:0;
        }
        .name{
            font-weight:800; font-size:16px; line-height:1.2;
            overflow:hidden; text-overflow:ellipsis;
            white-space:nowrap;
        }
        .email{
            font-size:13px; color:var(--muted);
            overflow:hidden; text-overflow:ellipsis;
            white-space:nowrap;
            margin-top:2px;
        }

        .actions{
            grid-area: actions;
            display:flex; flex-direction:column; gap:8px; width:100%;
        }
        .btn{
            display:inline-flex; align-items:center; justify-content:center; gap:6px;
            padding:10px 14px; font-size:14px; font-weight:800; border-radius:12px;
            border:1px solid var(--brand); background:var(--brand); color:var(--mint-2); text-decoration:none; cursor:pointer;
            width:100%;
        }
        .btn:hover{ background:var(--brand-hover); border-color:var(--brand-hover); }
        .btn.secondary{ background:rgba(255,255,255,.85); color:var(--text); border-color:rgba(64,32,80,.18); }
        .btn.secondary:hover{ background:rgba(255,255,255,.95); }
        .btn.danger{ background:var(--danger); border-color:var(--danger); color:#fff; }
        .btn.danger:hover{ background:var(--danger-hover); border-color:var(--danger-hover); }

        /* Кнопка “Надіслати активацію” (м’який акцент) */
        .btn.resend{
            background: rgba(250,204,21,.18);
            border-color: rgba(234,179,8,.45);
            color: #7c2d12;
        }
        .btn.resend:hover{
            background: rgba(250,204,21,.26);
            border-color: rgba(234,179,8,.55);
        }

        /* ===== планшет/десктоп ===== */
        @media (min-width:768px){
            .card{ padding:22px; } h1{ font-size:24px; }
            .row{
                grid-template-columns: auto 1fr auto;
                grid-template-areas: "role info actions";
                align-items:center;
            }
            .pills{ flex-direction:column; }
            .name, .email{ white-space:nowrap; }
            .actions{
                flex-direction:row;
                width:auto;
                flex-wrap:wrap;
                justify-content:flex-end;
            }
            .actions .btn{ width:auto; }
        }
    </style>
</head>
<body>

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

<main class="container">

    <?php
    $tabs = [
        ['href' => 'dashboard.php',        'label' => 'Журнали'],
        ['href' => '../journal/group_journal.php', 'label' => 'Управління журналами'],
        ['href' => 'dz/index.php',         'label' => 'Домашнє завдання'],
        ['href' => 'admin_students.php',   'label' => 'Учні'],
        ['href' => 'admin_father.php',     'label' => 'Батьки'],
        ['href' => 'admin_teachers.php',   'label' => 'Вчителі'],
        ['href' => '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">
        <h1>Вітаємо, <?php echo h($full_name); ?>!</h1>
        <p class="lead">Розділ «Викладачі» — адміни відображаються першими. Також показано статус активації пошти.</p>

        <?php if (!empty($flash['msg'])): ?>
            <div class="card" style="padding:12px; border:1px solid var(--border); background:rgba(255,255,255,.85); color:<?php echo ($flash['type']==='success')?'#065f46':'#7a1a12'; ?>; margin-bottom:12px;">
                <?php echo h($flash['msg']); ?>
            </div>
        <?php endif; ?>

        <?php if (empty($users)): ?>
            <p class="lead" style="margin-top:10px">Немає даних для відображення.</p>
        <?php else: ?>
            <div class="list" style="margin-top:12px">
                <?php foreach ($users as $u): ?>
                    <?php $isActive = (int)($u['active'] ?? 0) === 1; ?>
                    <div class="row">
                        <div class="pills">
                            <span class="role-pill" data-role="<?php echo h($u['role'] ?? ''); ?>">
                                <?php echo (($u['role'] ?? '') === 'admin') ? 'Адміністратор' : 'Викладач'; ?>
                            </span>

                            <span class="status-pill" data-active="<?php echo $isActive ? '1' : '0'; ?>">
                                <?php echo $isActive ? 'Пошта підтверджена' : 'Не активовано'; ?>
                            </span>
                        </div>

                        <div class="info">
                            <div class="name"><?php echo h($u['full_name'] ?? ''); ?></div>
                            <div class="email"><?php echo h($u['email'] ?? ''); ?></div>
                        </div>

                        <div class="actions">
                            <!-- Спочатку Профіль (синя), потім Редагувати (сіра) -->
                            <a class="btn" href="teacher_profile.php?teacher_id=<?php echo (int)$u['id']; ?>">Профіль</a>
                            <a class="btn secondary" href="edit_user.php?id=<?php echo (int)$u['id']; ?>">Редагувати</a>

                            <?php if (($_SESSION['role'] ?? '') === 'admin' && !$isActive): ?>
                                <!-- Повторно надіслати лист активації (лише якщо не активовано) -->
                                <form method="post" onsubmit="return confirm('Надіслати лист активації повторно?');" style="margin:0">
                                    <input type="hidden" name="action" value="resend_activation">
                                    <input type="hidden" name="csrf" value="<?php echo h($CSRF); ?>">
                                    <input type="hidden" name="user_id" value="<?php echo (int)$u['id']; ?>">
                                    <button class="btn resend" type="submit">Надіслати активацію</button>
                                </form>
                            <?php endif; ?>

                            <?php if (($u['role'] ?? '') !== 'admin'): ?>
                                <!-- Кнопка видалення тільки для викладачів, адмінів видаляти не можна -->
                                <?php if (($_SESSION['role'] ?? '') === 'admin'): ?>
                                    <form method="post" onsubmit="return confirm('Підтвердити видалення користувача?');" style="margin:0">
                                        <input type="hidden" name="action" value="delete_user">
                                        <input type="hidden" name="csrf" value="<?php echo h($CSRF); ?>">
                                        <input type="hidden" name="user_id" value="<?php echo (int)$u['id']; ?>">
                                        <button class="btn danger" type="submit">Видалити</button>
                                    </form>
                                <?php endif; ?>
                            <?php endif; ?>
                        </div>
                    </div>
                <?php endforeach; ?>
            </div>
        <?php endif; ?>
    </section>
</main>

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

</body>
</html>