<?php
session_start();
require_once 'config.php';

$pdo = getConexaoAtiva(); // Banco Principal (Onde ficam os Streams)
$pdo_int = getConexaoInterna(); // Banco Local (Onde ficam as configs)

// ====================================================================
// 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) {}

// --- LÓGICA AJAX: ATUALIZAÇÃO EM TEMPO REAL ---
if (isset($_GET['ajax_stats'])) {
    header('Content-Type: application/json');
    
    // 1. CPU (Estimativa de Carga)
    $load = sys_getloadavg();
    // Multiplicamos por 20 para ter uma % visual baseada nos núcleos (ajuste simples)
    $cpu_percent = min(100, round($load[0] * 20)); 

    // 2. RAM
    $free_output = shell_exec('free -m');
    $ram_total = 0; $ram_used = 0; $ram_percent = 0;
    if (preg_match('/Mem:\s+(\d+)\s+(\d+)/', $free_output, $matches)) {
        $ram_total = $matches[1];
        $ram_used = $matches[2];
        $ram_percent = round(($ram_used / $ram_total) * 100);
    }

    // 3. DISCO (Armazenamento)
    $disk_total = disk_total_space('/');
    $disk_free = disk_free_space('/');
    $disk_used = $disk_total - $disk_free;
    $disk_percent = ($disk_total > 0) ? round(($disk_used / $disk_total) * 100) : 0;

    // 4. INTERNET (Banda / Network)
    // Pega a interface de rede principal (ex: eth0)
    $iface = trim(shell_exec("ip route | grep default | awk '{print $5}'"));
    if (!$iface) $iface = 'eth0';
    $rx_bytes = (float)@file_get_contents("/sys/class/net/$iface/statistics/rx_bytes");
    $tx_bytes = (float)@file_get_contents("/sys/class/net/$iface/statistics/tx_bytes");

    // 5. CANAIS NO BANCO (COMPATÍVEL XUI E XTREAM)
    try {
        if ($modo_ativo === 'xui') {
            // No XUI ONE, Live é type 1, 3 e 4. Não usa direct_source.
            $live_count = $pdo->query("SELECT COUNT(*) FROM streams WHERE type IN (1,3,4)")->fetchColumn() ?: 0;
            $direct_count = 0; // XUI geralmente faz proxy via stream_source internamente
        } else {
            // Lógica Xtream UI original
            $live_count = $pdo->query("SELECT COUNT(*) FROM streams WHERE type = 1 AND direct_source = 0 AND live_started_at > 0")->fetchColumn() ?: 0;
            $direct_count = $pdo->query("SELECT COUNT(*) FROM streams WHERE type = 1 AND direct_source = 1")->fetchColumn() ?: 0;
        }
    } catch (Exception $e) {
        $live_count = 0;
        $direct_count = 0;
    }

    echo json_encode([
        'cpu' => $cpu_percent,
        'ram_used' => round($ram_used / 1024, 2),
        'ram_total' => round($ram_total / 1024, 2),
        'ram_percent' => $ram_percent,
        'disk_percent' => $disk_percent,
        'rx_bytes' => $rx_bytes, // Download Total
        'tx_bytes' => $tx_bytes, // Upload Total
        'live_count' => $live_count,
        'direct_count' => $direct_count,
        'iface' => $iface
    ]);
    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) {}

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

$role = $_SESSION['user_role'];
$nome_usuario = $_SESSION['username'];
$user_id_logado = $_SESSION['user_id'];

// BLOQUEIO DE SEGURANÇA: SÓ ADMIN ENTRA AQUI
if ($role !== 'admin') {
    header("Location: dashboard.php");
    exit;
}

try { $user_credits = $pdo_int->query("SELECT credits FROM reg_users WHERE id = $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>Monitor do Servidor - <?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: #0ea5e9; }
        body { margin: 0; font-family: 'Segoe UI', sans-serif; background-color: var(--bg-dark); color: var(--text-main); display: flex; height: 100vh; overflow: hidden; }

        /* CSS OBRIGATÓRIO PARA A LOGO E MENU (Evita o bug da logo gigante) */
        .sidebar { width: 260px; background-color: var(--bg-sidebar); border-right: 1px solid var(--border-color); display: flex; flex-direction: column; transition: 0.3s; z-index: 1001; flex-shrink: 0;}
        .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); }
        .user-info .badge { background: rgba(0, 123, 255, 0.2); color: var(--accent); padding: 4px 10px; border-radius: 4px; font-size: 11px; text-transform: uppercase; font-weight: bold; margin-top: 5px; display: inline-block; }
        .credits-badge { display: block; margin-top: 10px; color: var(--success); font-weight: bold; font-size: 13px; }
        .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; cursor: pointer; transition: 0.2s; font-size: 15px; border-left: 3px solid transparent;}
        .menu-item i:first-child { margin-right: 12px; width: 20px; text-align: center; color: var(--text-muted); }
        .menu-item:hover, .menu-item.active { background-color: #2c3138; color: white; border-left-color: var(--accent); }
        .menu-item.active i:first-child { color: var(--accent); }
        .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: 11px; }
        .rotate { transform: rotate(180deg); }
        .logout-btn { padding: 15px; background-color: var(--danger); color: white; text-align: center; text-decoration: none; font-weight: bold; margin-top: auto;}

        .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(0, 123, 255, 0.15); color: var(--accent); border-radius: 20px; font-size: 12px; font-weight: bold; border: 1px solid var(--accent); white-space: nowrap; display: inline-block; }

        /* GRIDS E CARDS DO MONITOR */
        .monitor-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 20px; margin-bottom: 25px; }
        .monitor-card { background: var(--bg-card); border: 1px solid var(--border-color); border-radius: 12px; padding: 25px; position: relative; overflow: hidden; }
        .card-title { font-size: 14px; color: var(--text-muted); text-transform: uppercase; font-weight: bold; margin-top: 0; margin-bottom: 15px; display: flex; align-items: center; gap: 10px; }
        
        .progress-container { width: 100%; background-color: #121519; border-radius: 8px; height: 20px; overflow: hidden; border: 1px solid var(--border-color); margin-top: 15px; }
        .progress-bar { height: 100%; text-align: right; padding-right: 10px; box-sizing: border-box; color: white; font-weight: bold; font-size: 12px; line-height: 20px; transition: width 0.5s ease; }
        
        .big-number { font-size: 36px; font-weight: 900; color: white; }
        .sub-text { font-size: 12px; color: var(--text-muted); }

        .net-box { display: flex; justify-content: space-between; align-items: center; margin-top: 10px; padding: 15px; background: #121519; border-radius: 8px; border: 1px solid var(--border-color); }
        .net-down { color: var(--info); }
        .net-up { color: var(--success); }

        /* PULSO DE STATUS (Bolinha piscando) */
        .pulse-live { width: 12px; height: 12px; background: var(--success); border-radius: 50%; display: inline-block; box-shadow: 0 0 10px var(--success); animation: pulse 1.5s infinite; }
        @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; } }

        .menu-toggle { display: none; background: none; border: none; color: white; font-size: 24px; cursor: pointer; }
        .sidebar-overlay { display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.7); z-index: 1000; }

        @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: 100px; }
        }
    </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; font-size: 18px;">Monitor de Recursos <span class="pulse-live" style="margin-left: 10px; width: 8px; height: 8px;"></span></h2>
            </div>
            <div class="topbar-right">
                <span class="mode-badge"><i class="fas fa-server"></i> MODO: <?php echo defined('MODO_SISTEMA') ? strtoupper(MODO_SISTEMA) : strtoupper($modo_ativo); ?></span>
            </div>
        </header>

        <div class="content-area">
            
            <p style="color: var(--text-muted); font-size: 13px; margin-top: 0; margin-bottom: 25px;"><i class="fas fa-info-circle"></i> Os dados abaixo são atualizados automaticamente a cada 2 segundos. Rede monitorada na interface: <strong id="lbl-iface">eth0</strong>.</p>

            <div class="monitor-grid">
                
                <div class="monitor-card">
                    <h3 class="card-title"><i class="fas fa-microchip" style="color: #8b5cf6;"></i> Uso de CPU</h3>
                    <div class="big-number"><span id="cpu-val">0</span>%</div>
                    <div class="progress-container">
                        <div class="progress-bar" id="cpu-bar" style="width: 0%; background-color: #8b5cf6;"></div>
                    </div>
                </div>

                <div class="monitor-card">
                    <h3 class="card-title"><i class="fas fa-memory" style="color: var(--info);"></i> Memória RAM</h3>
                    <div class="big-number"><span id="ram-val">0</span>%</div>
                    <div class="sub-text">Usado: <span id="ram-used">0</span> GB / Total: <span id="ram-total">0</span> GB</div>
                    <div class="progress-container">
                        <div class="progress-bar" id="ram-bar" style="width: 0%; background-color: var(--info);"></div>
                    </div>
                </div>

                <div class="monitor-card">
                    <h3 class="card-title"><i class="fas fa-hdd" style="color: var(--warning);"></i> Armazenamento SSD</h3>
                    <div class="big-number"><span id="disk-val">0</span>%</div>
                    <div class="sub-text">Cuidado para o FFmpeg não lotar o disco!</div>
                    <div class="progress-container">
                        <div class="progress-bar" id="disk-bar" style="width: 0%; background-color: var(--warning);"></div>
                    </div>
                </div>

            </div>

            <div class="monitor-card" style="margin-bottom: 25px;">
                <h3 class="card-title"><i class="fas fa-network-wired" style="color: var(--success);"></i> Tráfego de Rede (Internet)</h3>
                <div style="display: flex; gap: 20px; flex-wrap: wrap;">
                    
                    <div class="net-box" style="flex: 1;">
                        <div>
                            <span class="sub-text">DOWNLOAD (Recebendo da Fonte)</span>
                            <div class="big-number net-down"><i class="fas fa-arrow-down"></i> <span id="rx-speed">0.00 MB/s</span></div>
                        </div>
                    </div>
                    
                    <div class="net-box" style="flex: 1;">
                        <div>
                            <span class="sub-text">UPLOAD (Enviando para Clientes)</span>
                            <div class="big-number net-up"><i class="fas fa-arrow-up"></i> <span id="tx-speed">0.00 MB/s</span></div>
                        </div>
                    </div>

                </div>
            </div>

            <div class="monitor-grid">
                <div class="monitor-card" style="border-left: 4px solid var(--success);">
                    <h3 class="card-title" style="color: var(--success);"><i class="fas fa-server"></i> Canais Ativos em MODO LIVE</h3>
                    <div class="big-number" id="live-count">0</div>
                    <div class="sub-text" style="margin-top: 10px;">Estes canais estão usando a internet (Download) e a CPU do servidor através do FFmpeg.</div>
                </div>

                <div class="monitor-card" style="border-left: 4px solid var(--warning);">
                    <h3 class="card-title" style="color: var(--warning);"><i class="fas fa-random"></i> Canais Ativos em MODO DIRECT</h3>
                    <div class="big-number" id="direct-count">0</div>
                    <div class="sub-text" style="margin-top: 10px;">Estes canais repassam o link original para o cliente. <strong>Consumo de internet e CPU = ZERO.</strong></div>
                </div>
            </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'); }
        }

        // LÓGICA DE MONITORAMENTO EM TEMPO REAL (AJAX)
        let lastRx = 0;
        let lastTx = 0;
        let lastTime = 0;

        function formatBytesSpeed(bytesPerSec) {
            if (bytesPerSec === 0) return '0.00 MB/s';
            const k = 1024;
            const dm = 2;
            const sizes = ['Bytes/s', 'KB/s', 'MB/s', 'GB/s'];
            const i = Math.floor(Math.log(bytesPerSec) / Math.log(k));
            return parseFloat((bytesPerSec / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];
        }

        function getColor(percent) {
            if (percent < 60) return '#28a745'; // Verde
            if (percent < 85) return '#f39c12'; // Laranja
            return '#dc3545'; // Vermelho
        }

        function fetchServerStats() {
            fetch('?ajax_stats=1')
                .then(response => response.json())
                .then(data => {
                    const now = Date.now();

                    // --- CALCULA A VELOCIDADE DA INTERNET ---
                    if (lastTime > 0) {
                        // Calcula a diferença de tempo em segundos
                        let timeDiff = (now - lastTime) / 1000;
                        
                        // Calcula Bytes por segundo
                        let rxSpeed = Math.max(0, (data.rx_bytes - lastRx) / timeDiff);
                        let txSpeed = Math.max(0, (data.tx_bytes - lastTx) / timeDiff);

                        document.getElementById('rx-speed').innerText = formatBytesSpeed(rxSpeed);
                        document.getElementById('tx-speed').innerText = formatBytesSpeed(txSpeed);
                    }
                    
                    lastRx = data.rx_bytes;
                    lastTx = data.tx_bytes;
                    lastTime = now;

                    // --- ATUALIZA CPU ---
                    document.getElementById('cpu-val').innerText = data.cpu;
                    document.getElementById('cpu-bar').style.width = data.cpu + '%';
                    document.getElementById('cpu-bar').style.backgroundColor = getColor(data.cpu);

                    // --- ATUALIZA RAM ---
                    document.getElementById('ram-val').innerText = data.ram_percent;
                    document.getElementById('ram-used').innerText = data.ram_used;
                    document.getElementById('ram-total').innerText = data.ram_total;
                    document.getElementById('ram-bar').style.width = data.ram_percent + '%';
                    document.getElementById('ram-bar').style.backgroundColor = getColor(data.ram_percent);

                    // --- ATUALIZA DISCO ---
                    document.getElementById('disk-val').innerText = data.disk_percent;
                    document.getElementById('disk-bar').style.width = data.disk_percent + '%';
                    document.getElementById('disk-bar').style.backgroundColor = getColor(data.disk_percent);

                    // --- CANAIS ---
                    document.getElementById('live-count').innerText = data.live_count;
                    document.getElementById('direct-count').innerText = data.direct_count;
                    document.getElementById('lbl-iface').innerText = data.iface;
                })
                .catch(error => console.error('Erro ao buscar stats:', error));
        }

        // Roda a função pela primeira vez e depois repete a cada 2 segundos
        fetchServerStats();
        setInterval(fetchServerStats, 2000);

    </script>
    <script src="tema.js"></script>
</body>
</html>