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

$pdo = getConexaoAtiva(); // Banco Principal
$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_revendedores = ($modo_ativo === 'xui') ? '`users`' : '`reg_users`';

// ==============================================================================
// 1. AUTO-CRIAÇÃO DAS TABELAS DE SEGURANÇA E AUTO-CORREÇÃO DE COLUNAS
// ==============================================================================
try {
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    // Tabela IPs
    $pdo->exec("CREATE TABLE IF NOT EXISTS `blocked_ips` (
        `id` int(11) NOT NULL AUTO_INCREMENT,
        `ip` varchar(39) NOT NULL,
        `notes` mediumtext DEFAULT NULL,
        `date` int(11) NOT NULL,
        `attempts_blocked` int(11) NOT NULL DEFAULT 0,
        PRIMARY KEY (`id`),
        UNIQUE KEY `ip_unique` (`ip`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;");

    // Tabela User Agents
    $pdo->exec("CREATE TABLE IF NOT EXISTS `blocked_user_agents` (
        `id` int(11) NOT NULL AUTO_INCREMENT,
        `user_agent` varchar(255) NOT NULL,
        `exact_match` int(11) NOT NULL DEFAULT 0,
        `attempts_blocked` int(11) NOT NULL DEFAULT 0,
        PRIMARY KEY (`id`),
        UNIQUE KEY `ua_unique` (`user_agent`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;");

    // Tabela ISPs
    $pdo->exec("CREATE TABLE IF NOT EXISTS `blocked_isps` (
        `id` int(11) NOT NULL AUTO_INCREMENT,
        `isp` mediumtext NOT NULL,
        `blocked` tinyint(4) NOT NULL DEFAULT 1,
        PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;");

    // Tabela ASNs
    $pdo->exec("CREATE TABLE IF NOT EXISTS `blocked_asns` (
        `id` int(11) NOT NULL AUTO_INCREMENT,
        `asn` int(11) NOT NULL,
        `isp` varchar(256) DEFAULT NULL,
        `domain` varchar(256) DEFAULT NULL,
        `country` varchar(16) DEFAULT NULL,
        `num_ips` int(11) DEFAULT 0,
        `type` varchar(64) DEFAULT NULL,
        `allocated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
        `blocked` tinyint(4) NOT NULL DEFAULT 1,
        PRIMARY KEY (`id`),
        UNIQUE KEY `asn_unique` (`asn`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;");

    // =======================================================================
    // CORREÇÃO XUI ONE: Se a tabela já existia (mas faltavam colunas), nós criamos elas agora!
    // =======================================================================
    try { $pdo->exec("ALTER TABLE `blocked_ips` ADD COLUMN `attempts_blocked` int(11) NOT NULL DEFAULT 0"); } catch (Exception $e) {}
    try { $pdo->exec("ALTER TABLE `blocked_ips` ADD COLUMN `notes` mediumtext DEFAULT NULL"); } catch (Exception $e) {}
    try { $pdo->exec("ALTER TABLE `blocked_ips` ADD COLUMN `date` int(11) NOT NULL DEFAULT 0"); } catch (Exception $e) {}
    
    try { $pdo->exec("ALTER TABLE `blocked_user_agents` ADD COLUMN `exact_match` int(11) NOT NULL DEFAULT 0"); } catch (Exception $e) {}
    try { $pdo->exec("ALTER TABLE `blocked_user_agents` ADD COLUMN `attempts_blocked` int(11) NOT NULL DEFAULT 0"); } catch (Exception $e) {}

} catch (PDOException $e) {
    die("Erro ao criar/atualizar tabelas de segurança: " . $e->getMessage());
}

// --- 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'] ?? 'reseller'; 
$nome_usuario = $_SESSION['username'] ?? 'Usuário';
$user_id_logado = $_SESSION['user_id'];

// APENAS ADMIN PODE ACESSAR A SEGURANÇA
if ($role !== 'admin') { header("Location: dashboard.php"); exit; }

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

$mensagem = "";

// ==============================================================================
// 2. PROCESSAMENTO DE FORMULÁRIOS (ADICIONAR BLOQUEIOS)
// ==============================================================================
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $tipo_form = $_POST['tipo_form'] ?? '';

    try {
        if ($tipo_form === 'add_ip') {
            $ip = trim($_POST['ip_address']);
            $notes = trim($_POST['notes']);
            $pdo->prepare("INSERT IGNORE INTO blocked_ips (ip, notes, date) VALUES (?, ?, ?)")->execute([$ip, $notes, time()]);
            $mensagem = "<div class='alert success'><i class='fas fa-check-circle'></i> IP Bloqueado com sucesso! (O Firewall de Rede será atualizado em 1 minuto)</div>";
        } 
        elseif ($tipo_form === 'add_ua') {
            $ua = trim($_POST['user_agent']);
            $exact = isset($_POST['exact_match']) ? 1 : 0;
            $pdo->prepare("INSERT IGNORE INTO blocked_user_agents (user_agent, exact_match) VALUES (?, ?)")->execute([$ua, $exact]);
            $mensagem = "<div class='alert success'><i class='fas fa-check-circle'></i> User Agent Bloqueado com sucesso!</div>";
        }
        elseif ($tipo_form === 'add_isp') {
            $isp = trim($_POST['isp_name']);
            $pdo->prepare("INSERT INTO blocked_isps (isp, blocked) VALUES (?, 1)")->execute([$isp]);
            $mensagem = "<div class='alert success'><i class='fas fa-check-circle'></i> ISP Bloqueado com sucesso!</div>";
        }
        elseif ($tipo_form === 'add_asn') {
            $asn = intval($_POST['asn_number']);
            $isp_asn = trim($_POST['asn_isp']);
            $pdo->prepare("INSERT IGNORE INTO blocked_asns (asn, isp, blocked) VALUES (?, ?, 1)")->execute([$asn, $isp_asn]);
            $mensagem = "<div class='alert success'><i class='fas fa-check-circle'></i> ASN Bloqueado com sucesso!</div>";
        }
    } catch (PDOException $e) {
        $mensagem = "<div class='alert danger'><i class='fas fa-exclamation-triangle'></i> Erro ao salvar: " . $e->getMessage() . "</div>";
    }
}

// ==============================================================================
// 3. EXCLUSÃO DE BLOQUEIOS
// ==============================================================================
if (isset($_GET['del_ip'])) { $pdo->prepare("DELETE FROM blocked_ips WHERE id = ?")->execute([$_GET['del_ip']]); header("Location: seguranca.php"); exit; }
if (isset($_GET['del_ua'])) { $pdo->prepare("DELETE FROM blocked_user_agents WHERE id = ?")->execute([$_GET['del_ua']]); header("Location: seguranca.php"); exit; }
if (isset($_GET['del_isp'])) { $pdo->prepare("DELETE FROM blocked_isps WHERE id = ?")->execute([$_GET['del_isp']]); header("Location: seguranca.php"); exit; }
if (isset($_GET['del_asn'])) { $pdo->prepare("DELETE FROM blocked_asns WHERE id = ?")->execute([$_GET['del_asn']]); header("Location: seguranca.php"); exit; }

// Buscas para exibir nas tabelas (Limitado a 500 para otimização extrema)
try { $lista_ips = $pdo->query("SELECT * FROM blocked_ips ORDER BY id DESC LIMIT 500")->fetchAll(PDO::FETCH_ASSOC); } catch(Exception $e) { $lista_ips = []; }
try { $lista_uas = $pdo->query("SELECT * FROM blocked_user_agents ORDER BY id DESC LIMIT 500")->fetchAll(PDO::FETCH_ASSOC); } catch(Exception $e) { $lista_uas = []; }
try { $lista_isps = $pdo->query("SELECT * FROM blocked_isps ORDER BY id DESC LIMIT 500")->fetchAll(PDO::FETCH_ASSOC); } catch(Exception $e) { $lista_isps = []; }
try { $lista_asns = $pdo->query("SELECT * FROM blocked_asns ORDER BY id DESC LIMIT 500")->fetchAll(PDO::FETCH_ASSOC); } catch(Exception $e) { $lista_asns = []; }

?>
<!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>Segurança 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: #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 VIA INCLUDE */
        .sidebar { width: 260px; background-color: var(--bg-sidebar); border-right: 1px solid var(--border-color); display: flex; flex-direction: column; transition: all 0.3s ease; 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 { max-width: 180px; max-height: 55px; object-fit: contain; }
        .user-info { padding: 20px; text-align: center; border-bottom: 1px solid var(--border-color); }
        .user-info .badge { background: rgba(255, 255, 255, 0.05); 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-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: 15px; cursor: pointer; }
        .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: 14px; border-left: none; }
        .arrow-icon { margin-left: auto; transition: 0.3s; font-size: 12px; }
        .rotate { transform: rotate(180deg); }
        .menu-category { padding: 20px 20px 8px; font-size: 11px; text-transform: uppercase; color: var(--text-muted); font-weight: bold; letter-spacing: 1px; }
        .logout-btn { padding: 15px; background-color: #dc3545; color: white; text-align: center; text-decoration: none; font-weight: bold; margin-top: auto;}

        /* MAIN CONTENT - BLINDAGEM CONTRA ESTICAMENTO */
        .main { flex: 1; display: flex; flex-direction: column; overflow-y: auto; width: 100%; position: relative; min-width: 0; overflow-x: hidden; }
        .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; min-width: 0; width: 100%; box-sizing: border-box; }
        
        .mode-badge { padding: 6px 15px; background: rgba(220, 53, 69, 0.15); color: var(--danger); border-radius: 20px; font-size: 12px; font-weight: bold; border: 1px solid var(--danger); white-space: nowrap; display: inline-flex; align-items: center; gap: 5px; cursor: pointer; transition: 0.2s; }
        .mode-badge:hover { filter: brightness(1.2); }

        /* ABAS (TABS) BLINDADAS - UTILIZA DISPLAY NONE !IMPORTANT */
        .tabs { display: flex; gap: 10px; margin-bottom: 20px; border-bottom: 1px solid var(--border-color); padding-bottom: 10px; overflow-x: auto; -webkit-overflow-scrolling: touch; scrollbar-width: none; }
        .tabs::-webkit-scrollbar { display: none; }
        .tab-btn { background: var(--bg-card); color: var(--text-main); border: 1px solid var(--border-color); padding: 10px 20px; border-radius: 6px; cursor: pointer; font-weight: bold; transition: 0.2s; white-space: nowrap; flex-shrink: 0; }
        .tab-btn.active { background: var(--accent); color: white; border-color: var(--accent); }
        .tab-btn:hover:not(.active) { background: #3a4149; }
        
        /* Modificado para que JS use classes exclusivas para funcionar no celular */
        .tab-content { display: none !important; }
        .tab-content.active { display: block !important; }

        /* LAYOUT DUPLO (Form + Table) */
        .layout-grid { display: grid; grid-template-columns: 350px 1fr; gap: 20px; align-items: start; }
        
        .form-card { background: var(--bg-card); padding: 20px; border-radius: 10px; border: 1px solid var(--border-color); }
        .form-card h3 { margin-top: 0; margin-bottom: 15px; font-size: 16px; color: white; border-bottom: 1px solid var(--border-color); padding-bottom: 10px; }
        .form-group { margin-bottom: 15px; }
        .form-group label { display: block; margin-bottom: 5px; font-size: 12px; font-weight: bold; color: var(--text-muted); text-transform: uppercase; }
        .form-group input[type="text"], .form-group input[type="number"] { width: 100%; padding: 10px; background: #121519; border: 1px solid var(--border-color); color: white; border-radius: 5px; box-sizing: border-box; }
        .checkbox-label { display: flex; align-items: center; gap: 10px; font-size: 13px; cursor: pointer; color: white; }
        .btn-submit { width: 100%; background: var(--danger); color: white; border: none; padding: 12px; border-radius: 5px; font-weight: bold; cursor: pointer; transition: 0.2s; }
        .btn-submit:hover { filter: brightness(1.2); }

        /* CORREÇÃO DO LAYOUT DA TABELA NO CELULAR (CRIANDO ROLAGEM HORIZONTAL) */
        .table-container { background: var(--bg-card); border-radius: 10px; border: 1px solid var(--border-color); overflow-x: auto; -webkit-overflow-scrolling: touch; white-space: nowrap; width: 100%; max-width: 100%; }
        table { width: 100%; border-collapse: collapse; min-width: 600px; }
        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: 13px; }
        .btn-del { background: rgba(220, 53, 69, 0.1); color: var(--danger); border: 1px solid var(--danger); padding: 5px 10px; border-radius: 4px; text-decoration: none; font-size: 11px; font-weight: bold; }
        .btn-del:hover { background: var(--danger); color: white; }
        .badge-count { background: #121519; border: 1px solid var(--border-color); padding: 3px 8px; border-radius: 10px; font-weight: bold; color: var(--warning); }

        .alert { padding: 15px; border-radius: 5px; margin-bottom: 20px; font-weight: bold; }
        .alert.success { background: rgba(40, 167, 69, 0.15); border: 1px solid var(--success); color: var(--success); }
        .alert.danger { background: rgba(220, 53, 69, 0.15); border: 1px solid var(--danger); color: var(--danger); }

        /* MODAL TUTORIAL */
        .modal { display: none; position: fixed; z-index: 2000; left: 0; top: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.85); overflow-y: auto; }
        .modal-content { background: var(--bg-card); width: 90%; max-width: 800px; margin: 5% auto; padding: 25px; border-radius: 12px; border: 1px solid var(--border-color); }
        .code-box { background: #121519; border: 1px solid var(--border-color); padding: 15px; border-radius: 8px; font-family: monospace; font-size: 12px; color: #a5d6ff; overflow-x: auto; white-space: pre-wrap; margin-bottom: 15px; word-break: break-all; }

        .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; }

        /* ==================================================================== */
        /* FORÇA A COR AZUL NO ADMINISTRADOR E VERDE NO SALDO */
        /* ==================================================================== */
        .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; }

        /* ==================================================================== */
        /* FORÇA OS ÍCONES DA SIDEBAR A FICAREM AZUIS */
        /* ==================================================================== */
        .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 !important; color: white !important; border-left-color: var(--accent) !important; }
        .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; }

        @media (max-width: 900px) {
            .layout-grid { grid-template-columns: 1fr; }
        }
        
        /* CORREÇÃO DO MENU LATERAL NO CELULAR PARA MANTER OS BOTÕES NA DIREITA E INVERTIDOS */
        @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; display: flex; flex-direction: row; justify-content: space-between; align-items: center; }
            .topbar > div:first-child h2 { display: none; } /* Oculta o título para dar espaço aos botões no mobile */
            .topbar-right { display: flex; gap: 5px !important; flex-wrap: nowrap; justify-content: flex-end; margin-left: auto; }
            .mode-badge { font-size: 9px; padding: 5px 8px; }
            .content-area { padding: 15px; min-width: 0; overflow-x: hidden; width: 100%; box-sizing: border-box; }
        }
    </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: 10px;">Firewall e Bloqueios</h2>
            </div>
            
            <div class="topbar-right" style="display: flex; gap: 10px; align-items: center;">
                <span class="mode-badge" onclick="document.getElementById('modalTutorial').style.display='block'">
                    <i class="fas fa-terminal"></i> INSTALAR FIREWALL NA VPS
                </span>
                <span class="mode-badge" style="cursor:default; background: rgba(0, 123, 255, 0.15); color: var(--accent); border-color: var(--accent);">
                    <i class="fas fa-shield-alt"></i> MODO: <?php echo defined('MODO_SISTEMA') ? strtoupper(MODO_SISTEMA) : strtoupper($modo_ativo); ?>
                </span>
            </div>
        </header>

        <div class="content-area">
            <?php echo $mensagem; ?>

            <div class="tabs">
                <button class="tab-btn active" onclick="switchTab('tab-ip', this)"><i class="fas fa-network-wired"></i> IPs</button>
                <button class="tab-btn" onclick="switchTab('tab-ua', this)"><i class="fas fa-mobile-alt"></i> User Agents (Apps)</button>
                <button class="tab-btn" onclick="switchTab('tab-isp', this)"><i class="fas fa-server"></i> ISPs (Provedores)</button>
                <button class="tab-btn" onclick="switchTab('tab-asn', this)"><i class="fas fa-globe"></i> ASNs</button>
            </div>

            <div id="tab-ip" class="tab-content active">
                <div class="layout-grid">
                    <div class="form-card">
                        <h3><i class="fas fa-ban"></i> Bloquear Novo IP</h3>
                        <form method="POST">
                            <input type="hidden" name="tipo_form" value="add_ip">
                            <div class="form-group">
                                <label>Endereço IP</label>
                                <input type="text" name="ip_address" placeholder="Ex: 192.168.0.1" required>
                            </div>
                            <div class="form-group">
                                <label>Anotações (Opcional)</label>
                                <input type="text" name="notes" placeholder="Motivo do bloqueio">
                            </div>
                            <button type="submit" class="btn-submit">SALVAR BLOQUEIO</button>
                        </form>
                    </div>
                    <div class="table-container">
                        <table>
                            <thead>
                                <tr><th>IP</th><th>Motivo</th><th>Data</th><th>Bloqueios Efetuados</th><th>Ação</th></tr>
                            </thead>
                            <tbody>
                                <?php if(empty($lista_ips)): ?>
                                    <tr><td colspan="5" style="text-align:center; color:var(--text-muted);">Nenhum IP bloqueado.</td></tr>
                                <?php else: foreach($lista_ips as $ip): ?>
                                    <tr>
                                        <td><strong><?php echo htmlspecialchars($ip['ip'] ?? ''); ?></strong></td>
                                        <td style="color:var(--text-muted);"><?php echo htmlspecialchars($ip['notes'] ?? '-'); ?></td>
                                        <td><?php echo isset($ip['date']) && $ip['date'] > 0 ? date('d/m/Y', $ip['date']) : 'S/D'; ?></td>
                                        <td><span class="badge-count"><?php echo $ip['attempts_blocked'] ?? 0; ?></span></td>
                                        <td><a href="?del_ip=<?php echo $ip['id']; ?>" class="btn-del" onclick="return confirm('Remover bloqueio?')"><i class="fas fa-trash"></i> Excluir</a></td>
                                    </tr>
                                <?php endforeach; endif; ?>
                            </tbody>
                        </table>
                    </div>
                </div>
            </div>

            <div id="tab-ua" class="tab-content">
                <div class="layout-grid">
                    <div class="form-card">
                        <h3><i class="fas fa-mobile-alt"></i> Bloquear User Agent</h3>
                        <p style="font-size:12px; color:var(--text-muted); margin-top:-10px;">Bloqueie aplicativos específicos que tentam baixar sua lista.</p>
                        <form method="POST">
                            <input type="hidden" name="tipo_form" value="add_ua">
                            <div class="form-group">
                                <label>Nome do User Agent</label>
                                <input type="text" name="user_agent" placeholder="Ex: VLC/3.0.16" required>
                            </div>
                            <div class="form-group">
                                <label class="checkbox-label">
                                    <input type="checkbox" name="exact_match" value="1">
                                    Correspondência Exata (Se desmarcado, bloqueia qualquer palavra que contenha o texto acima)
                                </label>
                            </div>
                            <button type="submit" class="btn-submit">SALVAR BLOQUEIO</button>
                        </form>
                    </div>
                    <div class="table-container">
                        <table>
                            <thead>
                                <tr><th>User Agent (Aplicativo)</th><th>Tipo de Regra</th><th>Bloqueios Efetuados</th><th>Ação</th></tr>
                            </thead>
                            <tbody>
                                <?php if(empty($lista_uas)): ?>
                                    <tr><td colspan="4" style="text-align:center; color:var(--text-muted);">Nenhum App bloqueado.</td></tr>
                                <?php else: foreach($lista_uas as $ua): ?>
                                    <tr>
                                        <td><strong style="color:var(--info);"><?php echo htmlspecialchars($ua['user_agent'] ?? ''); ?></strong></td>
                                        <td><?php echo !empty($ua['exact_match']) ? 'Exato' : 'Contém a palavra'; ?></td>
                                        <td><span class="badge-count"><?php echo $ua['attempts_blocked'] ?? 0; ?></span></td>
                                        <td><a href="?del_ua=<?php echo $ua['id']; ?>" class="btn-del" onclick="return confirm('Remover bloqueio?')"><i class="fas fa-trash"></i> Excluir</a></td>
                                    </tr>
                                <?php endforeach; endif; ?>
                            </tbody>
                        </table>
                    </div>
                </div>
            </div>

            <div id="tab-isp" class="tab-content">
                <div class="layout-grid">
                    <div class="form-card">
                        <h3><i class="fas fa-server"></i> Bloquear Provedor (ISP)</h3>
                        <form method="POST">
                            <input type="hidden" name="tipo_form" value="add_isp">
                            <div class="form-group">
                                <label>Nome do Provedor</label>
                                <input type="text" name="isp_name" placeholder="Ex: DigitalOcean, Amazon" required>
                            </div>
                            <button type="submit" class="btn-submit">SALVAR BLOQUEIO</button>
                        </form>
                    </div>
                    <div class="table-container">
                        <table>
                            <thead>
                                <tr><th>Provedor (ISP)</th><th>Status</th><th>Ação</th></tr>
                            </thead>
                            <tbody>
                                <?php if(empty($lista_isps)): ?>
                                    <tr><td colspan="3" style="text-align:center; color:var(--text-muted);">Nenhum ISP bloqueado.</td></tr>
                                <?php else: foreach($lista_isps as $isp): ?>
                                    <tr>
                                        <td><strong><?php echo htmlspecialchars($isp['isp'] ?? ''); ?></strong></td>
                                        <td><span style="color:var(--danger); font-weight:bold;"><i class="fas fa-lock"></i> Bloqueado</span></td>
                                        <td><a href="?del_isp=<?php echo $isp['id']; ?>" class="btn-del" onclick="return confirm('Remover bloqueio?')"><i class="fas fa-trash"></i> Excluir</a></td>
                                    </tr>
                                <?php endforeach; endif; ?>
                            </tbody>
                        </table>
                    </div>
                </div>
            </div>

            <div id="tab-asn" class="tab-content">
                <div class="layout-grid">
                    <div class="form-card">
                        <h3><i class="fas fa-globe"></i> Bloquear ASN</h3>
                        <form method="POST">
                            <input type="hidden" name="tipo_form" value="add_asn">
                            <div class="form-group">
                                <label>Número ASN</label>
                                <input type="number" name="asn_number" placeholder="Ex: 13335" required>
                            </div>
                            <div class="form-group">
                                <label>Nome da Empresa / Provedor</label>
                                <input type="text" name="asn_isp" placeholder="Ex: Cloudflare Inc">
                            </div>
                            <button type="submit" class="btn-submit">SALVAR BLOQUEIO</button>
                        </form>
                    </div>
                    <div class="table-container">
                        <table>
                            <thead>
                                <tr><th>ASN</th><th>Provedor</th><th>Data de Registro</th><th>Ação</th></tr>
                            </thead>
                            <tbody>
                                <?php if(empty($lista_asns)): ?>
                                    <tr><td colspan="4" style="text-align:center; color:var(--text-muted);">Nenhum ASN bloqueado.</td></tr>
                                <?php else: foreach($lista_asns as $asn): ?>
                                    <tr>
                                        <td><strong style="color:#8b5cf6;">AS<?php echo htmlspecialchars($asn['asn'] ?? ''); ?></strong></td>
                                        <td><?php echo htmlspecialchars($asn['isp'] ?? '-'); ?></td>
                                        <td style="color:var(--text-muted); font-size:12px;"><?php echo htmlspecialchars($asn['allocated'] ?? ''); ?></td>
                                        <td><a href="?del_asn=<?php echo $asn['id']; ?>" class="btn-del" onclick="return confirm('Remover bloqueio?')"><i class="fas fa-trash"></i> Excluir</a></td>
                                    </tr>
                                <?php endforeach; endif; ?>
                            </tbody>
                        </table>
                    </div>
                </div>
            </div>

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

    <div id="modalTutorial" class="modal">
        <div class="modal-content">
            <h2 style="margin-top:0; color:white;"><i class="fas fa-shield-alt" style="color:var(--info);"></i> Instalação do Anti-DDoS e Firewall Nativo</h2>
            <p style="color:var(--text-muted); font-size:14px;">Para que as tabelas de IP acima comecem a bloquear ataques e invasores diretamente na <b>placa de rede do servidor</b> (barrando-os antes mesmo de abrirem o painel), faça a instalação rápida abaixo.</p>
            
            <h3 style="color:var(--accent); font-size:15px; margin-bottom:5px;">Comando de Instalação Único (SSH):</h3>
            <p style="font-size:13px; margin-top:0;">Abra o terminal SSH da sua VPS (como usuário root), clique no botão abaixo para copiar e cole no terminal.</p>
            
            <div class="code-box" id="codigo-ssh">apt-get update && apt-get install ipset iptables cron -y && iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 50 --connlimit-mask 32 -j REJECT --reject-with tcp-reset && iptables -A INPUT -p tcp --syn --dport 443 -m connlimit --connlimit-above 50 --connlimit-mask 32 -j REJECT --reject-with tcp-reset && echo "&lt;?php if(php_sapi_name()!=='cli')die(); require_once __DIR__.'/config.php'; \$pdo=getConexaoAtiva(); exec('ipset create painel_blocks hash:ip 2&gt;/dev/null'); exec('iptables -C INPUT -m set --match-set painel_blocks src -j DROP 2&gt;/dev/null || iptables -I INPUT -m set --match-set painel_blocks src -j DROP'); exec('ipset flush painel_blocks'); \$ips=\$pdo-&gt;query('SELECT ip FROM blocked_ips')-&gt;fetchAll(PDO::FETCH_COLUMN); foreach(\$ips as \$ip) { \$ip=trim(\$ip); if(filter_var(\$ip,FILTER_VALIDATE_IP)) exec('ipset add painel_blocks '.escapeshellarg(\$ip).' 2&gt;/dev/null'); } ?&gt;" > <?php echo __DIR__; ?>/sync_firewall.php && (crontab -l 2>/dev/null; echo "* * * * * /usr/bin/php <?php echo __DIR__; ?>/sync_firewall.php > /dev/null 2>&1") | crontab - && echo "INSTALADO COM SUCESSO!"</div>

            <button type="button" onclick="copiarComando()" style="width:100%; padding:12px; background:var(--success); border:none; color:white; border-radius:6px; cursor:pointer; font-weight:bold; margin-bottom:15px; transition: 0.2s;">
                <i class="fas fa-copy"></i> COPIAR COMANDO PARA O TERMINAL
            </button>

            <p style="font-size:12px; color:var(--warning);"><i class="fas fa-check-circle"></i> Após colar e apertar Enter no terminal, se aparecer "INSTALADO COM SUCESSO!", o painel já estará cruzando os bloqueios com a placa de rede da máquina!</p>

            <button onclick="document.getElementById('modalTutorial').style.display='none'" style="width:100%; padding:12px; background:var(--bg-sidebar); border:1px solid var(--border-color); color:white; border-radius:6px; cursor:pointer; font-weight:bold; margin-top:10px;">FECHAR JANELA</button>
        </div>
    </div>

    <script>
        // Função para Copiar o Comando SSH
        function copiarComando() {
            const comandoElement = document.getElementById('codigo-ssh');
            // Pegar o texto mantendo as tags decodificadas corretamente
            const textoComando = comandoElement.innerText || comandoElement.textContent;
            
            const el = document.createElement('textarea');
            el.value = textoComando;
            document.body.appendChild(el);
            el.select();
            document.execCommand('copy');
            document.body.removeChild(el);
            
            alert('Comando copiado com sucesso! Agora é só colar no seu terminal SSH.');
        }

        // MÁGICA: Nova Lógica de Abas à Prova de Falhas Mobile usando exclusão de classes
        function switchTab(tabName, btn) {
            var contents = document.querySelectorAll('.tab-content');
            for(var i = 0; i < contents.length; i++) {
                contents[i].classList.remove('active');
            }
            
            var btns = document.querySelectorAll('.tab-btn');
            for(var i = 0; i < btns.length; i++) {
                btns[i].classList.remove('active');
            }
            
            document.getElementById(tabName).classList.add('active');
            if (btn) {
                btn.classList.add('active');
            }
        }

        // Lógica Padrão do Menu Lateral via Include
        const sidebar = document.getElementById('sidebar');
        const overlay = document.getElementById('overlay');
        
        function toggleMenu() { 
            if(sidebar) sidebar.classList.toggle('active'); 
            if(overlay) 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'); }
        }
    </script>
    <script src="tema.js"></script>
</body>
</html>
