<?php
session_start();
error_reporting(0);
ini_set('display_errors', 0);
require_once 'config.php';

$pdo = getConexaoAtiva(); // Banco Principal (Xtream ou XUI)
$pdo_int = getConexaoInterna(); // Banco Local

$pdo->exec("SET NAMES utf8mb4");
$pdo_int->exec("SET NAMES utf8mb4");

// ====================================================================
// INTELIGÊNCIA ARTIFICIAL: DETECTA SE É XUI ONE OU XTREAM UI
// ====================================================================
$modo_ativo = 'interno';
try {
    $modo_ativo = $pdo_int->query("SELECT modo_ativo FROM configuracoes LIMIT 1")->fetchColumn() ?: 'interno';
} catch (Exception $e) {}

$tabela_clientes = ($modo_ativo === 'xui') ? '`lines`' : '`users`';
$cond_p2p = ($modo_ativo === 'xui') ? "1=1" : "(u.is_p2p = 0 OR u.is_p2p IS NULL)";

// MAPEAMENTO INTELIGENTE DE TABELAS DE MÍDIA
$tabela_categorias = 'stream_categories';
$tabela_series = 'series';
$tabela_episodios = 'series_episodes';

if ($modo_ativo === 'xui') {
    try { $pdo->query("SELECT 1 FROM streams_categories LIMIT 1"); $tabela_categorias = 'streams_categories'; } catch (Exception $e) { try { $pdo->query("SELECT 1 FROM categories LIMIT 1"); $tabela_categorias = 'categories'; } catch (Exception $e2) { } }
    try { $pdo->query("SELECT 1 FROM streams_series LIMIT 1"); $tabela_series = 'streams_series'; } catch (Exception $e) {}
    try { $pdo->query("SELECT 1 FROM streams_episodes LIMIT 1"); $tabela_episodios = 'streams_episodes'; } catch (Exception $e) {}
}

// --- VERIFICAÇÃO BLINDADA DE COLUNAS DO RASTREADOR KOFFICE ---
$tem_last_activity = false;
$tem_last_ip = false;
$tem_current_channel = false;

if ($modo_ativo === 'xui') {
    try { $pdo->query("SELECT last_activity FROM `lines` LIMIT 1"); $tem_last_activity = true; } 
    catch(Exception $e) { try { $pdo->exec("ALTER TABLE `lines` ADD COLUMN `last_activity` INT(11) DEFAULT 0"); $tem_last_activity = true; } catch(Exception $e2) {} }
    
    try { $pdo->query("SELECT last_ip FROM `lines` LIMIT 1"); $tem_last_ip = true; } 
    catch(Exception $e) { try { $pdo->exec("ALTER TABLE `lines` ADD COLUMN `last_ip` VARCHAR(50) DEFAULT NULL"); $tem_last_ip = true; } catch(Exception $e2) {} }
    
    try { $pdo->query("SELECT current_channel FROM `lines` LIMIT 1"); $tem_current_channel = true; } 
    catch(Exception $e) { try { $pdo->exec("ALTER TABLE `lines` ADD COLUMN `current_channel` INT(11) DEFAULT NULL"); $tem_current_channel = true; } catch(Exception $e2) {} }
} else {
    // COMPATIBILIDADE MYSQL 5.7 PARA XTREAM UI NATIVO
    try {
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        
        try {
            $check = $pdo->query("SHOW COLUMNS FROM `users` LIKE 'last_ip'");
            if ($check && $check->rowCount() == 0) { $pdo->exec("ALTER TABLE `users` ADD COLUMN `last_ip` VARCHAR(50) DEFAULT NULL"); }
        } catch(Exception $e) {}

        try {
            $check = $pdo->query("SHOW COLUMNS FROM `users` LIKE 'connected_at'");
            if ($check && $check->rowCount() == 0) { $pdo->exec("ALTER TABLE `users` ADD COLUMN `connected_at` INT(11) DEFAULT 0"); }
        } catch(Exception $e) {}

        try {
            $check = $pdo->query("SHOW COLUMNS FROM `users` LIKE 'current_channel'");
            if ($check && $check->rowCount() == 0) { $pdo->exec("ALTER TABLE `users` ADD COLUMN `current_channel` INT(11) DEFAULT NULL"); }
        } catch(Exception $e) {}
        
    } catch (PDOException $e) {}
}

if (!isset($_SESSION['user_id'])) { header("Location: login.php"); exit; }

$role = $_SESSION['user_role'] ?? 'reseller'; 
$nome_usuario = $_SESSION['username'] ?? 'Usuário';
$user_id_logado = $_SESSION['user_id'];

// --- LÓGICA AJAX: DERRUBAR CLIENTE (KILL SWITCH) ---
if (isset($_GET['kill_user'])) {
    @ob_end_clean();
    header('Content-Type: application/json; charset=utf-8');
    
    $kid = intval($_GET['kill_user']);
    $filtro_and = ($role === 'admin') ? "" : "AND member_id = $user_id_logado";
    
    if ($modo_ativo === 'xui') {
        try { $pdo->prepare("DELETE FROM `lines_live` WHERE user_id = ?")->execute([$kid]); } catch(Exception $e){}
        try { $pdo->prepare("DELETE FROM `user_activity` WHERE user_id = ?")->execute([$kid]); } catch(Exception $e){}
        try { $pdo->prepare("DELETE FROM `client_logs` WHERE line_id = ?")->execute([$kid]); } catch(Exception $e){}
        if ($tem_last_activity) { try { $pdo->prepare("UPDATE `lines` SET last_activity = 0, current_channel = NULL WHERE id = ?")->execute([$kid]); } catch(Exception $e){} }
    } else {
        $pdo->prepare("UPDATE $tabela_clientes SET current_channel = 0, last_activity = 0 WHERE id = ? $filtro_and")->execute([$kid]);
    }
    
    echo json_encode(['success' => true]);
    exit;
}

// --- LÓGICA AJAX: ATUALIZA A TABELA DE ONLINE EM TEMPO REAL ---
if (isset($_GET['ajax_online'])) {
    @ob_end_clean(); // MÁGICA: Limpa qualquer aviso ou erro do PHP antes de montar o JSON!
    header('Content-Type: application/json; charset=utf-8');
    header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
    header("Cache-Control: post-check=0, pre-check=0", false);
    header("Pragma: no-cache");
    
    try { $pdo->exec("SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''))"); } catch(Exception $e){}
    
    $time_limit_online = time() - 300; // 5 Minutos
    $filtro_and = ($role === 'admin') ? "" : "AND u.member_id = $user_id_logado";
    $sql = "";

    if ($modo_ativo === 'xui') {
        $sub_queries = [];
        try { $pdo->query("SELECT user_id, stream_id, user_ip, date_start FROM `lines_live` LIMIT 1"); $sub_queries[] = "SELECT user_id, stream_id, user_ip, date_start FROM `lines_live`"; } catch(Exception $e){}
        try { $pdo->query("SELECT user_id, stream_id, user_ip, date_start FROM `user_activity` LIMIT 1"); $sub_queries[] = "SELECT user_id, stream_id, user_ip, date_start FROM `user_activity` WHERE date_end IS NULL OR date_end = 0 OR date_start >= $time_limit_online"; } catch(Exception $e){}
        try { $pdo->query("SELECT line_id, stream_id, user_ip, date_start FROM `client_logs` LIMIT 1"); $sub_queries[] = "SELECT line_id as user_id, stream_id, user_ip, date_start FROM `client_logs` WHERE date_start >= $time_limit_online"; } catch(Exception $e){}
        
        $act_join = "";
        if (!empty($sub_queries)) {
            $union_sql = implode(" UNION ", $sub_queries);
            $act_join = "LEFT JOIN ($union_sql) act ON u.id = act.user_id";
        } else {
            $act_join = "LEFT JOIN (SELECT 0 as user_id, 0 as stream_id, '' as user_ip, 0 as date_start WHERE 0) act ON u.id = act.user_id";
        }

        $col_act = $tem_last_activity ? "u.last_activity" : "0";
        $col_ip = $tem_last_ip ? "u.last_ip" : "NULL";
        $col_chan = $tem_current_channel ? "u.current_channel" : "NULL";

        // MÁGICA KOFFICE: Cruza o XUI (act) com o Rastreador Customizado ($col_chan)
        $sql = "
            SELECT u.id, u.username, 
                   GREATEST(IFNULL(act.date_start, 0), IFNULL($col_act, 0)) as last_activity, 
                   COALESCE(act.user_ip, $col_ip, 'Oculto') as last_ip, 
                   IFNULL(act.date_start, $col_act) as connected_at, 
                   COALESCE(act.stream_id, $col_chan) as current_channel,
                   s.stream_display_name as name_stream, s.stream_icon as icon_stream, c_stream.category_name as cat_stream, s.type as stream_type,
                   ser.title as name_serie, ser.cover as icon_serie, c_serie.category_name as cat_serie
            FROM `lines` u
            $act_join
            LEFT JOIN streams s ON COALESCE(act.stream_id, $col_chan) = s.id
            LEFT JOIN $tabela_categorias c_stream ON s.category_id = c_stream.id
            LEFT JOIN $tabela_episodios se ON COALESCE(act.stream_id, $col_chan) = se.stream_id
            LEFT JOIN $tabela_series ser ON se.series_id = ser.id
            LEFT JOIN $tabela_categorias c_serie ON ser.category_id = c_serie.id
            WHERE ($col_act >= $time_limit_online OR act.date_start >= $time_limit_online OR act.date_start IS NOT NULL)
            AND 1=1 $filtro_and
            GROUP BY u.id
            ORDER BY last_activity DESC
        ";
    } else {
        $sql = "
            SELECT u.id, u.username, u.last_activity, u.last_ip, u.connected_at, u.current_channel,
                   s.stream_display_name as name_stream, s.stream_icon as icon_stream, c_stream.category_name as cat_stream, s.type as stream_type,
                   ser.title as name_serie, ser.cover as icon_serie, c_serie.category_name as cat_serie
            FROM $tabela_clientes u
            LEFT JOIN streams s ON u.current_channel = s.id
            LEFT JOIN $tabela_categorias c_stream ON s.category_id = c_stream.id
            LEFT JOIN $tabela_episodios se ON u.current_channel = se.stream_id
            LEFT JOIN $tabela_series ser ON se.series_id = ser.id
            LEFT JOIN $tabela_categorias c_serie ON ser.category_id = c_serie.id
            WHERE u.last_activity >= $time_limit_online AND $cond_p2p $filtro_and
            ORDER BY u.last_activity DESC
        ";
    }
            
    try {
        $clientes_online = $pdo->query($sql)->fetchAll(PDO::FETCH_ASSOC);
    } catch(Exception $e) {
        $clientes_online = [];
    }
    
    $data = [];
    foreach($clientes_online as $c) {
        
        $conteudo = 'Navegando no Menu...';
        $categoria = 'Koffice Engine';
        $icone = 'https://via.placeholder.com/40?text=APP';
        
        if (!empty($c['name_stream'])) {
            if (isset($c['stream_type']) && $c['stream_type'] == 5 && !empty($c['name_serie'])) {
                $conteudo = $c['name_serie'] . ' - ' . $c['name_stream'];
                $categoria = $c['cat_serie'] ?: 'Séries';
                $icone = $c['icon_serie'] ?: 'https://via.placeholder.com/40?text=S%C3%89RIE';
            } else {
                $conteudo = $c['name_stream'];
                $categoria = $c['cat_stream'] ?: 'Canais / VOD';
                $icone = $c['icon_stream'] ?: 'https://via.placeholder.com/40?text=TV';
            }
        }

        $ip = $c['last_ip'] ? $c['last_ip'] : 'Desconhecido';
        
        $uptime = 'Agora';
        if ($c['connected_at'] > 0) {
            $diff = time() - $c['connected_at'];
            if ($diff < 0) $diff = 0;
            $horas = floor($diff / 3600);
            $minutos = floor(($diff % 3600) / 60);
            if ($horas > 0) {
                $uptime = "{$horas}h {$minutos}m";
            } else {
                $uptime = "{$minutos} min";
            }
        }

        $data[] = [
            'id' => $c['id'],
            'username' => htmlspecialchars($c['username']),
            'conteudo' => htmlspecialchars($conteudo),
            'categoria' => htmlspecialchars($categoria),
            'icone' => htmlspecialchars($icone),
            'ip' => htmlspecialchars($ip),
            'uptime' => $uptime
        ];
    }
    
    echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_INVALID_UTF8_IGNORE);
    exit;
}

// --- INÍCIO: BUSCA DE PERSONALIZAÇÃO DINÂMICA ---
$nome_painel = 'TOP IPTV';
$logo_url = '';
$cor_primaria = '#007bff';

try {
    $tabela_existe = $pdo_int->query("SHOW TABLES LIKE 'painel_config'")->rowCount() > 0;
    if ($tabela_existe) {
        $config_painel = $pdo_int->query("SELECT * FROM painel_config LIMIT 1")->fetch(PDO::FETCH_ASSOC);
        if ($config_painel) {
            $nome_painel = !empty($config_painel['nome_painel']) ? $config_painel['nome_painel'] : $nome_painel;
            $logo_url = !empty($config_painel['logo_url']) ? $config_painel['logo_url'] : $logo_url;
            $cor_primaria = !empty($config_painel['cor_primaria']) ? $config_painel['cor_primaria'] : $cor_primaria;
        }
    }
} catch (Exception $e) {}

try { $user_credits = $pdo_int->query("SELECT credits FROM reg_users WHERE id = " . intval($user_id_logado))->fetchColumn() ?: 0; } catch (Exception $e) { $user_credits = 0; }
?>

<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <link rel="stylesheet" href="tema.css">
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
    <title>Clientes Online - <?php echo htmlspecialchars($nome_painel); ?></title>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
    <style>
        :root { 
            --bg-dark: #0f1114; 
            --bg-sidebar: #1e2227; 
            --bg-card: #272c33; 
            --text-main: #d1d5da; 
            --text-muted: #8a94a1; 
            --accent: <?php echo $cor_primaria; ?>; 
            --border-color: #3a4149; 
            --success: #28a745; 
            --danger: #dc3545; 
            --warning: #f39c12;
            --info: #17a2b8;
        }
        body { margin: 0; font-family: 'Segoe UI', sans-serif; background-color: var(--bg-dark); color: var(--text-main); display: flex; height: 100vh; overflow: hidden; }

        .sidebar { width: 260px; background-color: var(--bg-sidebar); border-right: 1px solid var(--border-color); display: flex; flex-direction: column; transition: 0.3s; flex-shrink: 0; z-index: 1001;}
        .sidebar-header { padding: 25px 20px; text-align: center; font-size: 22px; font-weight: bold; color: white; border-bottom: 1px solid var(--border-color); }
        .sidebar-logo { width: 100%; max-width: 180px; height: auto; max-height: 60px; object-fit: contain; display: block; margin: 0 auto; }
        
        .user-info { padding: 20px; text-align: center; border-bottom: 1px solid var(--border-color); }
        /* FORÇA A COR AZUL NO ADMINISTRADOR E VERDE NO SALDO INDEPENDENTE DA CLASSE DO SIDEBAR.PHP */
        .user-info > div:nth-child(2), .user-info .badge { background: rgba(0, 123, 255, 0.2) !important; color: var(--accent) !important; padding: 4px 10px !important; border-radius: 4px !important; font-size: 11px !important; text-transform: uppercase !important; font-weight: bold !important; margin-top: 5px !important; margin-bottom: 5px !important; display: inline-block !important; }
        .user-info > div:nth-child(3), .user-info .credits-badge, .user-info i.fa-coins { color: var(--success) !important; font-weight: bold !important; font-size: 13px !important; display: inline-block !important; }
        .user-info > div:nth-child(3) { margin-top: 8px !important; display: block !important; }

        .menu-list { list-style: none; padding: 0; margin: 0; overflow-y: auto; flex: 1; }
        .menu-category { padding: 20px 20px 8px; font-size: 11px; text-transform: uppercase; color: var(--text-muted); font-weight: bold; letter-spacing: 1px; }
        .menu-item { padding: 14px 20px; color: var(--text-main); text-decoration: none; display: flex; align-items: center; transition: 0.2s; border-left: 3px solid transparent; font-size: 14px; cursor: pointer; }
        
        /* FORÇA OS ÍCONES DA SIDEBAR A FICAREM AZUIS INDEPENDENTE DA CLASSE NATIVA */
        .sidebar i, .sidebar span[class*="icon"], .sidebar .fas, .sidebar .fab { color: var(--accent) !important; }
        .menu-item i:first-child { margin-right: 12px; width: 20px; text-align: center; color: var(--accent) !important; }
        
        .menu-item:hover, .menu-item.active { background-color: #2c3138; color: white; border-left-color: var(--accent); }
        .sidebar .active, .sidebar .menu-item.active, .sidebar li.active > a { border-left-color: var(--accent) !important; color: white !important; background: #24282d !important; }
        .sidebar a:hover, .sidebar .menu-item:hover { border-left-color: var(--accent) !important; color: white !important; background: #2c3138 !important; }

        .submenu { display: none; background: #16191d; list-style: none; padding: 0; margin: 0; }
        .submenu .menu-item { padding-left: 52px; font-size: 13px; border-left: none; }
        .arrow-icon { margin-left: auto; transition: 0.3s; font-size: 12px; }
        .rotate { transform: rotate(180deg); }
        .logout-btn { padding: 15px; background-color: #dc3545; color: white; text-align: center; text-decoration: none; font-weight: bold; }
        .sidebar-overlay { display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.7); z-index: 1000; }

        .main { flex: 1; display: flex; flex-direction: column; overflow-y: auto; width: 100%; position: relative; }
        .topbar { display: flex; justify-content: space-between; align-items: center; padding: 15px 30px; background-color: var(--bg-sidebar); border-bottom: 1px solid var(--border-color); }
        .content-area { padding: 25px; flex: 1; }
        .mode-badge { padding: 6px 15px; background: rgba(23, 162, 184, 0.15); color: var(--info); border-radius: 20px; font-size: 12px; font-weight: bold; border: 1px solid var(--info); white-space: nowrap; display: inline-block; }

        .table-container { background: var(--bg-card); border-radius: 10px; border: 1px solid var(--border-color); overflow-x: auto; }
        table { width: 100%; border-collapse: collapse; min-width: 850px; }
        th { background: rgba(0,0,0,0.2); padding: 15px; text-align: left; font-size: 11px; color: var(--text-muted); text-transform: uppercase; }
        td { padding: 12px 15px; border-bottom: 1px solid var(--border-color); font-size: 14px; vertical-align: middle; }
        
        .channel-icon { width: 40px; height: 40px; border-radius: 5px; object-fit: contain; background: #000; border: 1px solid var(--border-color); }
        
        .pulse-live { width: 10px; height: 10px; background: var(--success); border-radius: 50%; display: inline-block; box-shadow: 0 0 8px var(--success); animation: pulse 1.5s infinite; margin-right: 5px; }
        @keyframes pulse { 0% { transform: scale(0.95); opacity: 0.8; } 50% { transform: scale(1.2); opacity: 1; } 100% { transform: scale(0.95); opacity: 0.8; } }

        .btn-kill { background: rgba(220, 53, 69, 0.1); border: 1px solid var(--danger); color: var(--danger); padding: 6px 12px; border-radius: 6px; cursor: pointer; font-size: 12px; font-weight: bold; transition: 0.2s; }
        .btn-kill:hover { background: var(--danger); color: white; }

        .menu-toggle { display: none; background: none; border: none; color: white; font-size: 24px; cursor: pointer; }

        @media (max-width: 768px) {
            .sidebar { position: fixed; left: -260px; height: 100%; box-shadow: 10px 0 20px rgba(0,0,0,0.5); }
            .sidebar.active { left: 0; }
            .sidebar-overlay.active { display: block; }
            .menu-toggle { display: block; margin-right: 15px; }
            .topbar { padding: 15px 20px; justify-content: flex-start; }
            .topbar-right { margin-left: auto; }
            .content-area { padding: 15px; padding-bottom: 120px; }
        }
    </style>
</head>
<body>

    <div class="sidebar-overlay" id="overlay" onclick="toggleMenu()"></div>

    <?php include 'sidebar.php'; ?>

    <div class="main">
        <header class="topbar">
            <div style="display: flex; align-items: center;">
                <button class="menu-toggle" id="btn-menu" onclick="toggleMenu()"><i class="fas fa-bars"></i></button>
                <h2 style="margin:0; color: white; margin-left:15px;">Conexões Ativas</h2>
            </div>
            <div class="topbar-right">
                <span class="mode-badge"><i class="fas fa-wifi"></i> TEMPO REAL</span>
            </div>
        </header>

        <div class="content-area">
            
            <p style="color: var(--text-muted); font-size: 13px; margin-top: 0; margin-bottom: 20px;"><i class="fas fa-info-circle"></i> A tabela abaixo é atualizada automaticamente a cada 5 segundos.</p>

            <div class="table-container">
                <table>
                    <thead>
                        <tr>
                            <th style="width: 50px;">Status</th>
                            <th>Usuário</th>
                            <th>Conteúdo Assistido</th>
                            <th>IP do Cliente</th>
                            <th>Tempo Online</th>
                            <th style="text-align: center;">Ações</th>
                        </tr>
                    </thead>
                    <tbody id="tabela-online">
                        <tr><td colspan="6" style="text-align:center; color: var(--text-muted);">Carregando conexões...</td></tr>
                    </tbody>
                </table>
            </div>

        </div>
        <?php include 'rodape.php'; ?>
    </div>

    <script>
        function toggleMenu() { 
            document.getElementById('sidebar').classList.toggle('active'); 
            document.getElementById('overlay').classList.toggle('active'); 
        }

        function toggleSubmenu(id) {
            const sub = document.getElementById(id);
            const arrow = document.getElementById('arrow-' + id);
            if (sub.style.display === "block") { sub.style.display = "none"; if(arrow) arrow.classList.remove('rotate'); } 
            else { sub.style.display = "block"; if(arrow) arrow.classList.add('rotate'); }
        }

        function derrubarCliente(id, username) {
            if(confirm("Tem certeza que deseja derrubar a conexão de " + username + "? O vídeo será cortado imediatamente.")) {
                fetch('?kill_user=' + id)
                .then(response => response.json())
                .then(data => {
                    carregarOnline(); 
                })
                .catch(error => console.error('Erro:', error));
            }
        }

        function carregarOnline() {
            fetch('?ajax_online=1&t=' + Date.now())
            .then(response => response.json())
            .then(data => {
                const tbody = document.getElementById('tabela-online');
                
                if (data.length === 0) {
                    tbody.innerHTML = "<tr><td colspan='6' style='text-align:center; color: var(--text-muted);'>Nenhum cliente online no momento.</td></tr>";
                    return;
                }

                let html = "";
                data.forEach(cliente => {
                    html += `
                    <tr>
                        <td style="text-align:center;"><div class="pulse-live"></div></td>
                        <td><strong>${cliente.username}</strong></td>
                        <td>
                            <div style="display:flex; align-items:center; gap:15px;">
                                <img src="${cliente.icone}" class="channel-icon">
                                <div>
                                    <strong style="color: white;">${cliente.conteudo}</strong><br>
                                    <span style="font-size:11px; color:var(--text-muted);"><i class="fas fa-folder-open"></i> ${cliente.categoria}</span>
                                </div>
                            </div>
                        </td>
                        <td><span style="background:#121519; padding:4px 8px; border-radius:4px; font-size:12px; border:1px solid var(--border-color); color: var(--info);"><i class="fas fa-network-wired"></i> ${cliente.ip}</span></td>
                        <td><span style="color:var(--success); font-weight:bold; font-size:13px;"><i class="far fa-clock"></i> ${cliente.uptime}</span></td>
                        <td style="text-align: center;">
                            <button onclick="derrubarCliente(${cliente.id}, '${cliente.username}')" class="btn-kill">
                                <i class="fas fa-power-off"></i> DERRUBAR
                            </button>
                        </td>
                    </tr>`;
                });
                
                tbody.innerHTML = html;
            })
            .catch(error => console.error('Erro ao buscar online:', error));
        }

        carregarOnline();
        setInterval(carregarOnline, 5000);
    </script>
    <script src="tema.js"></script>
</body>
</html>
