View file admin.php

File size: 45.41Kb
<?php
session_start();
require 'db.php';
require 'lang.php';

// Система лицензирования удалена - Видеозвонки теперь бесплатны для всех.


// Проверка доступа администратора (Роль Admin ИЛИ ID 1)
if (!isset($_SESSION['user_id']) || ($_SESSION['user_id'] != 1 && (!isset($_SESSION['role']) || $_SESSION['role'] !== 'admin'))) {
    header("Location: index.php");
    exit;
}

// Обработка действий
$message = '';
$action = $_GET['action'] ?? 'dashboard';

// Начальная загрузка настроек (рано для состояния лицензии)
$earlySettings = [];
try {
    $stmt = $pdo->query("SELECT name, value FROM settings");
    while ($row = $stmt->fetch()) {
        $earlySettings[$row['name']] = $row['value'];
    }
} catch (Exception $e) {
}

$isInitiallyActivated = true; // Всегда активировано

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // Обновление настроек
    if (isset($_POST['update_settings'])) {
        $title = trim($_POST['site_title']);
        $favicon = trim($_POST['favicon']);
        $footer = trim($_POST['footer_text']);
        $defLang = trim($_POST['default_lang']);

        // Обработка загрузки файла логотипа
        if (isset($_FILES['logo_file']) && $_FILES['logo_file']['error'] === UPLOAD_ERR_OK) {
            $fileTmpPath = $_FILES['logo_file']['tmp_name'];
            $fileName = $_FILES['logo_file']['name'];
            $fileExtension = strtolower(pathinfo($fileName, PATHINFO_EXTENSION));
            $allowedExtensions = ['png', 'jpg', 'jpeg', 'gif', 'ico', 'svg'];

            if (in_array($fileExtension, $allowedExtensions)) {
                $destPath = 'assets/site_logo.' . $fileExtension;
                if (move_uploaded_file($fileTmpPath, $destPath)) {
                    $favicon = $destPath;
                }
            }
        }

        $pdo->prepare("REPLACE INTO settings (name, value) VALUES ('site_title', ?)")->execute([$title]);
        $pdo->prepare("REPLACE INTO settings (name, value) VALUES ('favicon', ?)")->execute([$favicon]);
        $pdo->prepare("REPLACE INTO settings (name, value) VALUES ('footer_text', ?)")->execute([$footer]);
        $pdo->prepare("REPLACE INTO settings (name, value) VALUES ('default_lang', ?)")->execute([$defLang]);

        $enableVoice = isset($_POST['enable_voice']) ? '1' : '0';
        $pdo->prepare("REPLACE INTO settings (name, value) VALUES ('enable_voice', ?)")->execute([$enableVoice]);

        // Видео всегда включено, если отмечено, проверка лицензии не требуется
        $enableVideo = isset($_POST['enable_video']) ? '1' : '0';
        $pdo->prepare("REPLACE INTO settings (name, value) VALUES ('enable_video', ?)")->execute([$enableVideo]);

        if (!$message) {
            $message = isset($t['settings_updated']) ? $t['settings_updated'] : "Settings updated!";
        }
    }



    // Переключение статуса блокировки
    if (isset($_POST['toggle_block'])) {
        $id = intval($_POST['user_id']);
        $newStatus = ($_POST['current_status'] === 'blocked') ? 'active' : 'blocked';
        if ($id != $_SESSION['user_id']) {
            $stmt = $pdo->prepare("UPDATE users SET status = ? WHERE id = ?");
            $stmt->execute([$newStatus, $id]);
            $message = (isset($t['status_updated']) ? $t['status_updated'] : "Status updated.") . " ($newStatus)";
        }
    }

    // Управление пользователями
    if (isset($_POST['delete_user'])) {
        $id = intval($_POST['user_id']);
        if ($id != $_SESSION['user_id']) { // Самозащита
            $pdo->prepare("DELETE FROM users WHERE id = ?")->execute([$id]);
            $message = isset($t['user_deleted']) ? $t['user_deleted'] : "User deleted.";
        }
    }

    // Управление ролями (user -> admin -> bot -> user)
    if (isset($_POST['toggle_role'])) {
        $id = intval($_POST['user_id']);
        $currentRole = $_POST['current_role'];

        $newRole = 'user';
        if ($currentRole === 'user') $newRole = 'admin';
        elseif ($currentRole === 'admin') $newRole = 'bot';
        elseif ($currentRole === 'bot') $newRole = 'user';

        if ($id != $_SESSION['user_id']) { // Защита текущего администратора
            $stmt = $pdo->prepare("UPDATE users SET role = ? WHERE id = ?");
            $stmt->execute([$newRole, $id]);
            $message = $t['role_updated'] . " " . strtoupper($newRole) . ".";
        }
    }

    // Добавить нового пользователя / администратора
    if (isset($_POST['create_user'])) {
        $username = trim($_POST['new_username']);
        $password = password_hash($_POST['new_password'], PASSWORD_DEFAULT);
        $role = $_POST['new_role'] === 'admin' ? 'admin' : 'user';

        if (!empty($username) && !empty($_POST['new_password'])) {
            $stmt = $pdo->prepare("INSERT INTO users (username, password, role) VALUES (?, ?, ?)");
            try {
                $stmt->execute([$username, $password, $role]);
                $message = (isset($t['user_created']) ? $t['user_created'] : "User created.") . " ($username)";
            } catch (Exception $e) {
                $message = isset($t['error_username_taken']) ? $t['error_username_taken'] : "Error: Username might be taken.";
            }
        }
    }

    // Управление комнатами
    if (isset($_POST['delete_room'])) {
        $id = intval($_POST['room_id']);
        if ($id != 1) { // Защита Общей комнаты
            $pdo->prepare("DELETE FROM rooms WHERE id = ?")->execute([$id]);
            $pdo->prepare("DELETE FROM messages WHERE room_id = ?")->execute([$id]); // Очистка
            $message = isset($t['room_deleted']) ? $t['room_deleted'] : "Room deleted.";
        }
    }
}

// Получение статистики
$stats = [
    'users' => $pdo->query("SELECT count(*) FROM users")->fetchColumn(),
    'messages' => $pdo->query("SELECT count(*) FROM messages")->fetchColumn(),
    'rooms' => $pdo->query("SELECT count(*) FROM rooms")->fetchColumn(),
];

// Получение данных
$users = $pdo->query("SELECT * FROM users ORDER BY created_at DESC")->fetchAll();
$rooms_list = $pdo->query("SELECT r.*, u.username as creator_name FROM rooms r LEFT JOIN users u ON r.created_by = u.id ORDER BY r.created_at ASC")->fetchAll();

// Получение настроек
$stmt = $pdo->query("SELECT * FROM settings");
$settings = [];
while ($row = $stmt->fetch()) {
    $settings[$row['name']] = $row['value'];
}
$siteTitle = $settings['site_title'] ?? 'ChatApp';
$siteFavicon = $settings['favicon'] ?? 'assets/logo.png';
$footerText = $settings['footer_text'] ?? 'by ANUS_TANGA';
$defaultLang = $settings['default_lang'] ?? 'en';
$enableVoice = $settings['enable_voice'] ?? '1';
$enableVideo = $settings['enable_video'] ?? '1';
$videoLicenseKey = ''; // Больше не используется
$isActivated = true; // Всегда активировано

?>
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
    <title>Admin Panel - <?php echo htmlspecialchars($siteTitle); ?></title>
    <link rel="stylesheet" href="assets/style.css">
    <link rel="stylesheet" href="assets/touch-optimizations.css">
    <link rel="icon" href="<?php echo htmlspecialchars($siteFavicon); ?>" type="image/png">
    <link href="https://fonts.googleapis.com/css2?family=Outfit:wght@300;400;600;700&display=swap" rel="stylesheet">
    <style>
        :root {
            --bg-gradient: linear-gradient(135deg, #0f0c29, #302b63, #24243e);
            --bg-main: #0f1011;
            --bg-sidebar: rgba(22, 24, 26, 0.8);
            --accent: #9d4edd;
            --accent-hover: #7b2cbf;
            --accent-glow: rgba(157, 78, 221, 0.4);
            --danger: #ff453a;
            --card-bg: rgba(30, 30, 30, 0.6);
            --border: rgba(255, 255, 255, 0.08);
            --text-main: #ffffff;
            --text-dim: #b0b0b0;
            --glass-border: rgba(255, 255, 255, 0.1);
        }

        * {
            box-sizing: border-box;
        }

        body {
            margin: 0;
            font-family: 'Outfit', sans-serif;
            background: var(--bg-gradient);
            background-size: 400% 400%;
            animation: gradientBG 15s ease infinite;
            color: var(--text-main);
            -webkit-font-smoothing: antialiased;
            min-height: 100vh;
        }

        @keyframes gradientBG {
            0% {
                background-position: 0% 50%;
            }

            50% {
                background-position: 100% 50%;
            }

            100% {
                background-position: 0% 50%;
            }
        }

        .admin-layout {
            display: flex;
            height: 100vh;
            backdrop-filter: blur(10px);
            background: rgba(0, 0, 0, 0.4);
            width: 100%;
            overflow: hidden;
        }

        /* Sidebar */
        .admin-sidebar {
            width: 280px;
            background: var(--bg-sidebar);
            padding: 40px 25px;
            border-right: 1px solid var(--border);
            display: flex;
            flex-direction: column;
            flex-shrink: 0;
            z-index: 100;
            backdrop-filter: blur(20px);
            height: 100%;
        }

        .admin-sidebar h2 {
            margin: 0;
            color: var(--accent);
            font-size: 1.5rem;
            font-weight: 700;
            letter-spacing: -0.5px;
        }

        .admin-nav {
            margin-top: 50px;
            flex: 1;
            display: flex;
            flex-direction: column;
        }

        .admin-nav a {
            display: flex;
            align-items: center;
            padding: 14px 20px;
            color: rgba(255, 255, 255, 0.6);
            text-decoration: none;
            border-radius: 14px;
            margin-bottom: 8px;
            font-size: 1rem;
            font-weight: 500;
            transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
            white-space: nowrap;
        }

        .admin-nav a:hover:not(.active):not(.back-link) {
            color: #fff;
            background: rgba(255, 255, 255, 0.05);
            transform: translateX(5px);
        }

        .admin-nav a.active {
            background: var(--accent) !important;
            color: #fff !important;
            box-shadow: 0 4px 15px rgba(157, 78, 221, 0.3);
        }

        /* Content Area */
        .admin-content {
            flex: 1;
            padding: 40px;
            background: var(--bg-main);
            overflow-y: auto;
            scroll-behavior: smooth;
        }

        h1 {
            font-size: 2.2rem;
            font-weight: 700;
            margin: 0 0 30px 0;
            letter-spacing: -1px;
        }

        section {
            scroll-margin-top: 100px;
        }

        /* Stats Grid */
        .stats-grid {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
            gap: 20px;
            margin-bottom: 40px;
        }

        .stat-card {
            background: var(--card-bg);
            padding: 25px;
            border-radius: 20px;
            text-align: left;
            border: 1px solid var(--border);
            transition: transform 0.3s ease;
        }

        .stat-card:hover {
            transform: translateY(-5px);
        }

        .welcome-card {
            background: var(--card-bg);
            padding: 30px;
            border-radius: 20px;
            border: 1px solid var(--border);
        }

        .admin-brand {
            display: flex;
            align-items: center;
            gap: 10px;
            margin-bottom: 30px;
        }

        .stat-num {
            font-size: 2.4rem;
            font-weight: 700;
            color: var(--accent);
            line-height: 1;
            margin-bottom: 8px;
        }

        .stat-label {
            color: var(--text-dim);
            font-size: 0.9rem;
            font-weight: 500;
            text-transform: uppercase;
            letter-spacing: 0.5px;
        }

        /* Tables */
        .table-wrapper {
            width: 100%;
            overflow-x: auto;
            background: var(--card-bg);
            border-radius: 20px;
            border: 1px solid var(--border);
            box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2);
        }

        table {
            width: 100%;
            border-collapse: collapse;
        }

        .hide-mobile {
            display: table-cell;
        }

        th {
            background: rgba(255, 255, 255, 0.02);
            padding: 12px 18px;
            text-align: left;
            color: var(--text-dim);
            font-size: 0.7rem;
            text-transform: uppercase;
            letter-spacing: 1px;
            font-weight: 700;
            border-bottom: 1px solid var(--border);
            white-space: nowrap;
        }

        @media (max-width: 992px) {
            .hide-mobile {
                display: none !important;
            }

            td,
            th {
                padding: 10px 8px;
                font-size: 0.8rem;
            }

            .btn-sm {
                padding: 5px 8px !important;
                font-size: 0.7rem !important;
            }

            .btn-text {
                display: none;
            }

            .table-wrapper {
                border-radius: 12px;
            }
        }

        td {
            padding: 14px 18px;
            border-bottom: 1px solid var(--border);
            font-size: 0.9rem;
            vertical-align: middle;
            word-break: break-all;
        }

        tr:last-child td {
            border-bottom: none;
        }

        tr:hover td {
            background: rgba(255, 255, 255, 0.015);
        }

        /* Buttons & Forms */
        .btn {
            border: none;
            border-radius: 10px;
            padding: 8px 16px;
            font-weight: 600;
            font-size: 0.85rem;
            cursor: pointer;
            transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
            display: inline-flex;
            align-items: center;
            justify-content: center;
            gap: 8px;
            height: 38px;
        }

        .btn-primary {
            background: var(--accent);
            color: #fff;
        }

        .btn-primary:hover {
            background: var(--accent-hover);
            transform: translateY(-2px);
            box-shadow: 0 5px 15px var(--accent-glow);
        }

        .btn-danger {
            background: var(--danger);
            color: #fff;
        }

        .btn-danger:hover {
            background: #ff5b52;
            transform: translateY(-2px);
            box-shadow: 0 5px 15px rgba(255, 69, 58, 0.3);
        }

        .form-group {
            margin-bottom: 0;
        }

        .form-group label {
            display: block;
            margin-bottom: 10px;
            color: var(--text-dim);
            font-size: 0.8rem;
            font-weight: 700;
            text-transform: uppercase;
            letter-spacing: 0.5px;
        }

        .form-group input,
        .form-group select {
            width: 100%;
            height: 52px;
            padding: 0 20px;
            background: rgba(255, 255, 255, 0.03);
            border: 1px solid var(--border);
            color: #fff;
            border-radius: 14px;
            font-family: inherit;
            font-size: 0.95rem;
            outline: none;
            transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
            appearance: none;
        }

        .form-group select {
            background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2398989d' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
            background-repeat: no-repeat;
            background-position: right 15px center;
            background-size: 18px;
            padding-right: 45px;
        }

        .form-group select option {
            background: #16181a;
            color: #fff;
            padding: 10px;
        }

        .form-group input:focus,
        .form-group select:focus {
            border-color: var(--accent);
            background: rgba(157, 78, 221, 0.1);
            box-shadow: 0 0 0 4px rgba(157, 78, 221, 0.2);
        }

        .form-group input::placeholder {
            color: rgba(255, 255, 255, 0.2);
        }

        /* Mobile Adjustments */
        @media (max-width: 992px) {
            .admin-layout {
                flex-direction: column;
                height: auto;
                min-height: 100vh;
                overflow: visible;
            }

            .admin-sidebar {
                width: 100%;
                padding: 8px 12px;
                height: auto;
                border-right: none;
                border-bottom: 1px solid var(--border);
                position: sticky;
                top: 0;
                flex-direction: row;
                align-items: center;
                justify-content: space-between;
                gap: 10px;
                background: rgba(22, 24, 26, 0.98);
                backdrop-filter: blur(30px);
                z-index: 2000;
            }

            .admin-sidebar img,
            .admin-sidebar h2 {
                display: none;
            }

            .admin-brand {
                display: none;
            }

            .admin-nav {
                margin-top: 0;
                display: flex;
                flex-direction: row;
                gap: 5px;
                overflow-x: auto;
                padding: 5px 0;
                flex: 1;
                justify-content: flex-start;
                scrollbar-width: none;
                -webkit-overflow-scrolling: touch;
            }

            .admin-nav::-webkit-scrollbar {
                display: none;
            }

            .admin-nav a {
                padding: 8px 12px;
                font-size: 0.8rem;
                margin-bottom: 0;
                flex-shrink: 0;
                border-radius: 10px;
                background: rgba(255, 255, 255, 0.03);
            }

            .admin-nav .back-link {
                margin-top: 0;
                padding: 8px 12px;
                background: rgba(157, 78, 221, 0.1) !important;
                border: 1px solid rgba(157, 78, 221, 0.2);
                margin-left: auto;
            }

            .admin-content {
                padding: 12px;
                width: 100%;
                overflow-x: hidden;
            }

            .welcome-card {
                padding: 15px;
                border-radius: 12px;
            }

            h1 {
                font-size: 1.3rem !important;
                margin-bottom: 12px;
                line-height: 1.2;
                word-wrap: break-word;
            }

            section {
                scroll-margin-top: 110px;
                margin-bottom: 40px !important;
            }

            .stats-grid {
                grid-template-columns: repeat(2, 1fr);
                gap: 8px;
            }

            .stat-num {
                font-size: 1.4rem;
            }

            .stat-card {
                padding: 12px;
                border-radius: 15px;
            }

            .user-form {
                grid-template-columns: 1fr !important;
                gap: 12px !important;
            }

            .user-form .btn-primary {
                height: 45px !important;
            }
        }

        @media (max-width: 480px) {
            .stats-grid {
                grid-template-columns: 1fr;
            }

            h1 {
                font-size: 1.2rem !important;
            }

            .admin-nav a {
                padding: 8px 10px;
                font-size: 0.75rem;
            }

            .admin-nav .back-link span {
                display: none;
            }
        }

        /* Improved UI Classes */
        .btn-outline {
            background: rgba(255, 255, 255, 0.03);
            border: 1px solid rgba(255, 255, 255, 0.1);
            color: #fff;
        }

        .btn-outline:hover {
            background: rgba(255, 255, 255, 0.08);
            border-color: rgba(255, 255, 255, 0.2);
            transform: translateY(-2px);
        }

        .btn-sm {
            padding: 8px 16px !important;
            font-size: 0.8rem !important;
            border-radius: 10px !important;
            height: auto !important;
        }

        /* File Input Styling */
        .file-upload-wrapper {
            position: relative;
            width: 100%;
            height: 52px;
            background: rgba(255, 255, 255, 0.03);
            border: 1px solid var(--border);
            border-radius: 14px;
            display: flex;
            align-items: center;
            padding: 0 20px;
            overflow: hidden;
            cursor: pointer;
            transition: all 0.2s;
        }

        .file-upload-wrapper:hover {
            border-color: var(--accent);
            background: rgba(255, 255, 255, 0.06);
        }

        .file-upload-wrapper input[type="file"] {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            opacity: 0;
            cursor: pointer;
        }

        .file-upload-text {
            color: var(--text-dim);
            font-size: 0.95rem;
            flex: 1;
            white-space: nowrap;
            overflow: hidden;
            text-overflow: ellipsis;
        }

        .file-upload-btn {
            background: var(--accent);
            color: #fff;
            padding: 6px 12px;
            border-radius: 8px;
            font-size: 0.75rem;
            font-weight: 700;
            text-transform: uppercase;
            margin-left: 10px;
        }

        .admin-nav .back-link {
            padding: 14px 20px;
            margin-top: 25px;
            border-radius: 14px;
            background: rgba(157, 78, 221, 0.1);
            color: var(--accent) !important;
            display: flex;
            align-items: center;
            gap: 10px;
            border: 1px solid rgba(157, 78, 221, 0.2);
            font-weight: 700;
        }

        .admin-nav .back-link:hover {
            background: rgba(157, 78, 221, 0.2);
            transform: scale(1.02);
            color: #fff !important;
        }

        /* Toggle Switch */
        .toggle-switch {
            position: relative;
            display: inline-block;
            width: 50px;
            height: 26px;
            margin-right: 12px;
            flex-shrink: 0;
        }

        .toggle-switch input {
            opacity: 0;
            width: 0;
            height: 0;
        }

        .slider {
            position: absolute;
            cursor: pointer;
            top: 0;
            left: 0;
            right: 0;
            bottom: 0;
            background-color: rgba(255, 255, 255, 0.1);
            transition: .4s;
            border-radius: 34px;
            border: 1px solid rgba(255, 255, 255, 0.2);
        }

        .slider:before {
            position: absolute;
            content: "";
            height: 18px;
            width: 18px;
            left: 3px;
            bottom: 3px;
            background-color: #fff;
            transition: .4s;
            border-radius: 50%;
        }

        input:checked+.slider {
            background-color: var(--primary);
            border-color: var(--primary);
        }

        input:focus+.slider {
            box-shadow: 0 0 1px var(--primary);
        }

        input:checked+.slider:before {
            transform: translateX(24px);
        }

        .feature-item {
            display: flex;
            align-items: center;
            padding: 10px;
            border-radius: 8px;
            transition: background 0.2s;
        }

        .feature-item:hover {
            background: rgba(255, 255, 255, 0.05);
        }
    </style>
</head>

<body>
    <div class="admin-layout">
        <div class="admin-sidebar">
            <div class="admin-brand">
                <img src="<?php echo htmlspecialchars($siteFavicon); ?>" style="width:32px; height:32px;">
                <h2>Admin</h2>
            </div>
            <nav class="admin-nav">
                <a href="#dashboard" class="nav-link active"><?php echo $t['dashboard']; ?></a>
                <a href="#users" class="nav-link"><?php echo $t['users']; ?></a>
                <a href="#rooms" class="nav-link"><?php echo $t['rooms']; ?></a>

                <a href="#settings" class="nav-link"><?php echo $t['settings']; ?></a>

                <a href="./" class="nav-link back-link"><span>&larr;</span> <span><?php echo $t['back_to_chat']; ?></span></a>
            </nav>
        </div>

        <div class="admin-content" style="scroll-behavior: smooth;">
            <?php if ($message): ?>
                <div style="background: rgba(76, 209, 55, 0.1); color: #4cd137; padding: 15px 20px; border-radius: 12px; margin-bottom: 30px; border: 1px solid rgba(76, 209, 55, 0.2); font-weight: 500;">
                    <?php echo $message; ?>
                </div>
            <?php endif; ?>

            <!-- DASHBOARD SECTION -->
            <section id="dashboard" style="margin-bottom: 60px;">
                <h1><?php echo $t['dashboard']; ?></h1>
                <div class="stats-grid">
                    <div class="stat-card">
                        <div class="stat-num"><?php echo $stats['users']; ?></div>
                        <div class="stat-label"><?php echo $t['total_users']; ?></div>
                    </div>
                    <div class="stat-card">
                        <div class="stat-num"><?php echo $stats['messages']; ?></div>
                        <div class="stat-label"><?php echo $t['total_msgs']; ?></div>
                    </div>
                    <div class="stat-card">
                        <div class="stat-num"><?php echo $stats['rooms']; ?></div>
                        <div class="stat-label"><?php echo $t['active_rooms']; ?></div>
                    </div>
                </div>

                <div class="welcome-card">
                    <h3 style="margin-top:0;">Система</h3>
                    <p style="color: var(--text-dim); line-height: 1.6;"><?php echo $t['admin_welcome']; ?></p>
                </div>
            </section>

            <!-- USERS SECTION -->
            <section id="users" style="margin-bottom: 60px; padding-top: 20px;">
                <h1><?php echo $t['users']; ?></h1>
                <div style="background: var(--card-bg); padding: 25px; border-radius: 20px; border: 1px solid var(--border); margin-bottom: 30px;">
                    <h3 style="margin-top:0; margin-bottom:20px;"><?php echo $t['create_user']; ?></h3>
                    <form method="POST" class="user-form" style="display:grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap:20px; align-items: flex-end;">
                        <div class="form-group">
                            <label><?php echo $t['username']; ?></label>
                            <input type="text" name="new_username" placeholder="e.g. john_doe" required>
                        </div>
                        <div class="form-group">
                            <label><?php echo $t['password']; ?></label>
                            <input type="password" name="new_password" placeholder="••••••••" required>
                        </div>
                        <div class="form-group">
                            <label><?php echo $t['role']; ?></label>
                            <select name="new_role">
                                <option value="user"><?php echo $t['standard_user']; ?></option>
                                <option value="admin"><?php echo $t['administrator']; ?></option>
                            </select>
                        </div>
                        <div>
                            <button type="submit" name="create_user" class="btn btn-primary" style="height:52px; width:100%;"><?php echo $t['create_account']; ?></button>
                        </div>
                    </form>
                </div>

                <div class="table-wrapper">
                    <table>
                        <thead>
                            <tr>
                                <th><?php echo $t['users']; ?></th>
                                <th class="hide-mobile">ID</th>
                                <th>Role</th>
                                <th class="hide-mobile"><?php echo $t['last_activity']; ?></th>
                                <th><?php echo $t['status']; ?></th>
                                <th style="text-align:right; padding-right:20px;"><?php echo $t['actions']; ?></th>
                            </tr>
                        </thead>
                        <tbody>
                            <?php foreach ($users as $u): ?>
                                <tr style="<?php echo $u['status'] == 'blocked' ? 'opacity:0.6; grayscale(1);' : ''; ?>">
                                    <td>
                                        <div style="display:flex; align-items:center; gap:12px;">
                                            <img src="<?php echo htmlspecialchars($u['avatar'] ?? 'assets/default_avatar.png'); ?>" style="width:36px; height:36px; border-radius:50%; object-fit:cover; border:1px solid var(--border);">
                                            <div style="font-weight:600; color:#fff;"><?php echo htmlspecialchars($u['username']); ?></div>
                                        </div>
                                    </td>
                                    <td class="hide-mobile" style="color:var(--text-dim); font-size:0.8rem; font-family:monospace;">#<?php echo $u['id']; ?></td>
                                    <td>
                                        <form method="POST" style="display:inline;">
                                            <input type="hidden" name="user_id" value="<?php echo $u['id']; ?>">
                                            <input type="hidden" name="current_role" value="<?php echo $u['role']; ?>">
                                            <button type="submit" name="toggle_role" class="btn btn-sm <?php echo $u['role'] == 'admin' ? 'btn-primary' : 'btn-outline'; ?>" <?php echo $u['id'] == $_SESSION['user_id'] ? 'disabled' : ''; ?> style="min-width:60px;">
                                                <?php echo strtoupper($u['role']); ?>
                                            </button>
                                        </form>
                                    </td>
                                    <td class="hide-mobile" style="font-size:0.85rem; color:var(--text-dim);"><?php echo $u['last_seen'] ? date('M j, H:i', strtotime($u['last_seen'])) : 'Never'; ?></td>
                                    <td>
                                        <?php if ($u['status'] == 'blocked'): ?>
                                            <span style="background:rgba(255,69,58,0.1); color:var(--danger); padding:4px 10px; border-radius:100px; font-size:0.7rem; font-weight:700;"><?php echo strtoupper($t['blocked']); ?></span>
                                        <?php else: ?>
                                            <span style="background:rgba(48,209,88,0.1); color:#30d158; padding:4px 10px; border-radius:100px; font-size:0.7rem; font-weight:700;"><?php echo strtoupper($t['active']); ?></span>
                                        <?php endif; ?>
                                    </td>
                                    <td style="padding-right:20px;">
                                        <?php if ($u['id'] != $_SESSION['user_id'] && $u['username'] != 'ChatBot'): ?>
                                            <div style="display:flex; align-items:center; justify-content:flex-end; gap:8px;">
                                                <form method="POST" style="margin:0;">
                                                    <input type="hidden" name="user_id" value="<?php echo $u['id']; ?>">
                                                    <input type="hidden" name="current_status" value="<?php echo $u['status'] ?? 'active'; ?>">
                                                    <button type="submit" name="toggle_block" class="btn btn-sm btn-outline" style="min-width:36px; padding: 0 10px; display:flex; align-items:center; gap:5px;">
                                                        <span><?php echo ($u['status'] ?? 'active') == 'blocked' ? '🔓' : '🚫'; ?></span>
                                                        <span class="hide-mobile"><?php echo ($u['status'] ?? 'active') == 'blocked' ? $t['unblock'] : $t['block']; ?></span>
                                                    </button>
                                                </form>
                                                <form method="POST" style="margin:0;" onsubmit="return confirm('Delete this user?');">
                                                    <input type="hidden" name="user_id" value="<?php echo $u['id']; ?>">
                                                    <button type="submit" name="delete_user" class="btn btn-sm btn-danger" style="width:36px; height:36px; padding:0; border-radius:12px; display:flex; align-items:center; justify-content:center;" title="<?php echo $t['delete']; ?>">
                                                        <svg viewBox="0 0 24 24" width="18" height="18" fill="currentColor">
                                                            <path d="M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z" />
                                                        </svg>
                                                    </button>
                                                </form>
                                            </div>
                                        <?php endif; ?>
                                    </td>
                                </tr>
                            <?php endforeach; ?>
                        </tbody>
                    </table>
                </div>
            </section>

            <!-- ROOMS SECTION -->
            <section id="rooms" style="margin-bottom: 60px; padding-top: 20px;">
                <h1><?php echo $t['rooms']; ?></h1>
                <div class="table-wrapper">
                    <table>
                        <thead>
                            <tr>
                                <th>Room Name</th>
                                <th class="hide-mobile">ID</th>
                                <th class="hide-mobile">Created By</th>
                                <th class="hide-mobile">Created At</th>
                                <th style="text-align:right; padding-right:20px; width:60px;"><?php echo $t['actions']; ?></th>
                            </tr>
                        </thead>
                        <tbody>
                            <?php foreach ($rooms_list as $r): ?>
                                <tr>
                                    <td style="font-weight:600; color:#fff;"><?php echo htmlspecialchars($r['name']); ?></td>
                                    <td class="hide-mobile" style="color:var(--text-dim); font-size:0.8rem; font-family:monospace;">#<?php echo $r['id']; ?></td>
                                    <td class="hide-mobile">
                                        <div style="font-weight:500; font-size:0.9rem; color:var(--text-main);"><?php echo $r['creator_name'] ?: 'System'; ?></div>
                                        <?php if ($r['created_by']): ?><div style="font-size:0.7rem; color:var(--text-dim);">ID: #<?php echo $r['created_by']; ?></div><?php endif; ?>
                                    </td>
                                    <td class="hide-mobile" style="font-size:0.85rem; color:var(--text-dim);"><?php echo date('M j, Y', strtotime($r['created_at'])); ?></td>
                                    <td style="text-align:right; padding-right:20px;">
                                        <?php if ($r['id'] != 1): ?>
                                            <form method="POST" style="display:inline;" onsubmit="return confirm('Delete this room?');">
                                                <input type="hidden" name="room_id" value="<?php echo $r['id']; ?>">
                                                <button type="submit" name="delete_room" class="btn btn-sm btn-danger" style="width:36px; height:36px; padding:0; border-radius:12px;" title="<?php echo $t['delete_room_btn']; ?>">
                                                    <svg viewBox="0 0 24 24" width="18" height="18" fill="currentColor">
                                                        <path d="M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z" />
                                                    </svg>
                                                </button>
                                            </form>
                                        <?php endif; ?>
                                    </td>
                                </tr>
                            <?php endforeach; ?>
                        </tbody>
                    </table>
                </div>


                <!-- SETTINGS SECTION -->
                <section id="settings" style="margin-bottom: 60px; padding-top: 20px; text-align: center;">
                    <h1 style="margin-bottom: 30px;"><?php echo $t['settings']; ?></h1>
                    <div style="max-width: 600px; margin: 0 auto; background: var(--card-bg); padding: 30px; border-radius: 20px; border: 1px solid var(--border); text-align: left;">
                        <form method="POST" enctype="multipart/form-data">
                            <div class="form-group" style="margin-bottom: 25px;">
                                <label><?php echo $t['site_title']; ?></label>
                                <input type="text" name="site_title" value="<?php echo htmlspecialchars($siteTitle); ?>" placeholder="e.g. My Awesome Chat">
                            </div>
                            <div class="form-group" style="margin-bottom: 25px;">
                                <label><?php echo $t['site_logo']; ?></label>
                                <div style="display:flex; align-items:center; gap:15px; margin-bottom:10px;">
                                    <img src="<?php echo htmlspecialchars($siteFavicon); ?>" style="width:50px; height:50px; border-radius:8px; object-fit:contain; background:rgba(255,255,255,0.02); border:1px solid var(--border);">
                                    <div style="flex:1;">
                                        <div class="file-upload-wrapper">
                                            <span class="file-upload-text" id="fileNameDisp"><?php echo $t['choose_file'] ?? 'Choose file...'; ?></span>
                                            <span class="file-upload-btn"><?php echo $t['browse'] ?? 'Browse'; ?></span>
                                            <input type="file" name="logo_file" accept="image/*" onchange="document.getElementById('fileNameDisp').innerText = this.files[0].name">
                                        </div>
                                        <div style="font-size:0.75rem; color:var(--text-dim); margin-top:8px;"><?php echo $t['or_enter_url'] ?? 'Or enter URL below:'; ?></div>
                                    </div>
                                </div>
                                <input type="text" name="favicon" value="<?php echo htmlspecialchars($siteFavicon); ?>" placeholder="assets/logo.png">
                            </div>
                            <div class="form-group" style="margin-bottom: 25px;">
                                <label><?php echo $t['footer_copyright']; ?></label>
                                <input type="text" name="footer_text" value="<?php echo htmlspecialchars($footerText); ?>" placeholder="by YOUR NAME">
                            </div>
                            <div class="form-group" style="margin-bottom: 25px;">
                                <label><?php echo $t['primary_lang']; ?></label>
                                <select name="default_lang">
                                    <option value="en" <?php echo $defaultLang == 'en' ? 'selected' : ''; ?>>English (United States)</option>
                                    <option value="uk" <?php echo $defaultLang == 'uk' ? 'selected' : ''; ?>>Ukrainian (Українська)</option>
                                    <option value="ru" <?php echo $defaultLang == 'ru' ? 'selected' : ''; ?>>Russian (Русский)</option>
                                </select>
                                <small style="color: var(--text-dim); display:block; margin-top:5px;"><?php echo isset($t['default_lang_help']) ? $t['default_lang_help'] : 'This will be the default for new guest users.'; ?></small>
                            </div>

                            <div class="form-group" style="margin-bottom: 25px;">
                                <label><?php echo isset($t['features']) ? $t['features'] : 'Features'; ?></label>
                                <div style="display:flex; flex-direction:column; gap:5px; background:rgba(255,255,255,0.02); padding:15px; border-radius:10px; border:1px solid var(--border);">
                                    <label class="feature-item" style="cursor:pointer;">
                                        <div class="toggle-switch">
                                            <input type="checkbox" name="enable_voice" value="1" <?php echo $enableVoice == '1' ? 'checked' : ''; ?>>
                                            <span class="slider"></span>
                                        </div>
                                        <span style="font-weight:500; font-size:0.95rem;"><?php echo isset($t['enable_voice']) ? $t['enable_voice'] : 'Enable Voice Messages'; ?></span>
                                    </label>
                                    <label class="feature-item" style="cursor:pointer;">
                                        <div class="toggle-switch">
                                            <input type="checkbox" name="enable_video" value="1" <?php echo $enableVideo == '1' ? 'checked' : ''; ?>>
                                            <span class="slider"></span>
                                        </div>
                                        <span style="font-weight:500; font-size:0.95rem;"><?php echo isset($t['enable_video']) ? $t['enable_video'] : 'Enable Video Calls'; ?></span>
                                    </label>
                                </div>
                            </div>



                            <button type="submit" name="update_settings" class="btn btn-primary" style="width:100%; height:52px; margin-top:10px; font-size:1rem;"><?php echo $t['apply_settings']; ?></button>
                        </form>
                    </div>
                </section>
        </div>
    </div>

    <script>
        // Smooth Active State for Sidebar
        const sections = document.querySelectorAll('section');
        const navLinks = document.querySelectorAll('.nav-link');
        const contentArea = document.querySelector('.admin-content');

        function updateActiveLink() {
            let current = '';
            const scrollSource = window.innerWidth <= 992 ? document.documentElement : contentArea;
            const scrollTop = scrollSource.scrollTop;

            sections.forEach(section => {
                const sectionTop = section.offsetTop;
                if (scrollTop >= sectionTop - 150) {
                    current = section.getAttribute('id');
                }
            });

            navLinks.forEach(link => {
                link.classList.remove('active');
                if (link.getAttribute('href').includes(current)) {
                    link.classList.add('active');
                }
            });
        }

        contentArea.addEventListener('scroll', updateActiveLink);
        window.addEventListener('scroll', updateActiveLink);
        window.addEventListener('resize', updateActiveLink);
        window.addEventListener('load', updateActiveLink);
    </script>
</body>

</html>