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

$pdo = getConexaoInterna();

// --- PROTEÇÃO DE ADMINISTRADOR ---
if (!isset($_SESSION['user_id']) || $_SESSION['user_role'] !== 'admin') {
    die("Acesso negado. Apenas administradores podem acessar esta página.");
}

$id_usuario = $_SESSION['user_id'];
$nome_usuario = $_SESSION['username'] ?? 'Admin';
$role = 'admin';

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

try {
    $tabela_existe = $pdo->query("SHOW TABLES LIKE 'painel_config'")->rowCount() > 0;
    if ($tabela_existe) {
        $config_painel = $pdo->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) { }

// --- LÓGICA DE MENU DINÂMICO PARA O BINSTREAM P2P ---
$api_conf = ['api_binstream_url' => ''];
try {
    $api_conf = $pdo->query("SELECT api_binstream_url FROM painel_config LIMIT 1")->fetch(PDO::FETCH_ASSOC) ?: ['api_binstream_url' => ''];
} catch (Exception $e) {}

// Busca saldo para o menu
try {
    $pdo_ext = getConexaoAtiva();
    $user_credits = $pdo_ext->query("SELECT credits FROM reg_users WHERE id = " . intval($id_usuario))->fetchColumn() ?: 0;
} catch (Exception $e) { $user_credits = 0; }
// --- FIM: BUSCA DE PERSONALIZAÇÃO DINÂMICA ---

// =========================================================================
// BANCO DE DADOS: CONFIGURAÇÕES CLOUDFLARE
// =========================================================================
try {
    $pdo->exec("CREATE TABLE IF NOT EXISTS `config_cloudflare` (
        `id` int(11) PRIMARY KEY,
        `api_token` varchar(255),
        `zone_id` varchar(255),
        `dns_name` varchar(255),
        `current_ip` varchar(50)
    )");
    
    if ($pdo->query("SELECT COUNT(*) FROM config_cloudflare")->fetchColumn() == 0) {
        $pdo->exec("INSERT INTO config_cloudflare (id, api_token) VALUES (1, '')");
    }
} catch (Exception $e) {}

$mensagem_status = "";

// AÇÃO: SALVAR CONFIGURAÇÕES
if (isset($_POST['action_save_cf'])) {
    $token = trim($_POST['cf_token']);
    $zone = trim($_POST['cf_zone']);
    $dns = trim($_POST['cf_dns']);
    
    $pdo->prepare("UPDATE config_cloudflare SET api_token = ?, zone_id = ?, dns_name = ? WHERE id = 1")
        ->execute([$token, $zone, $dns]);
    $mensagem_status = "<div class='alert success'><i class='fas fa-check-circle'></i> Configurações do Cloudflare salvas!</div>";
}

// AÇÃO: O BOTÃO DE PÂNICO (MIGRAÇÃO REAL)
if (isset($_POST['action_panic'])) {
    $new_ip = trim($_POST['new_ip']);
    $conf = $pdo->query("SELECT * FROM config_cloudflare WHERE id = 1")->fetch(PDO::FETCH_ASSOC);
    
    if (empty($conf['api_token']) || empty($conf['zone_id'])) {
        $mensagem_status = "<div class='alert danger'>Configure as chaves do Cloudflare primeiro!</div>";
    } else {
        // --- LÓGICA DE COMUNICAÇÃO COM API DO CLOUDFLARE ---
        $res = migrarDNSCloudflare($conf['api_token'], $conf['zone_id'], $conf['dns_name'], $new_ip);
        
        if ($res['success']) {
            $pdo->prepare("UPDATE config_cloudflare SET current_ip = ? WHERE id = 1")->execute([$new_ip]);
            $mensagem_status = "<div class='alert success'><i class='fas fa-shield-alt'></i> <b>MIGRAÇÃO CONCLUÍDA!</b> O tráfego foi redirecionado para o IP $new_ip em segundos.</div>";
        } else {
            $mensagem_status = "<div class='alert danger'>Erro no Cloudflare: " . $res['error'] . "</div>";
        }
    }
}

$cf = $pdo->query("SELECT * FROM config_cloudflare WHERE id = 1")->fetch(PDO::FETCH_ASSOC);

// FUNÇÃO PARA FALAR COM O CLOUDFLARE
function migrarDNSCloudflare($token, $zone, $dns_name, $ip) {
    $ch = curl_init("https://api.cloudflare.com/client/v4/zones/$zone/dns_records?name=$dns_name");
    curl_setopt($ch, CURLOPT_HTTPHEADER, ["Authorization: Bearer $token", "Content-Type: application/json"]);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $response = json_decode(curl_exec($ch), true);
    
    if (empty($response['result'][0]['id'])) return ['success' => false, 'error' => 'Registro DNS não encontrado.'];
    $record_id = $response['result'][0]['id'];

    $update_data = json_encode(["type" => "A", "name" => $dns_name, "content" => $ip, "ttl" => 1, "proxied" => true]);
    $ch2 = curl_init("https://api.cloudflare.com/client/v4/zones/$zone/dns_records/$record_id");
    curl_setopt($ch2, CURLOPT_CUSTOMREQUEST, "PUT");
    curl_setopt($ch2, CURLOPT_POSTFIELDS, $update_data);
    curl_setopt($ch2, CURLOPT_HTTPHEADER, ["Authorization: Bearer $token", "Content-Type: application/json"]);
    curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
    $res_final = json_decode(curl_exec($ch2), true);
    
    if ($res_final['success']) return ['success' => true];
    return ['success' => false, 'error' => $res_final['errors'][0]['message']];
}
?>

<!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>Anti-Bloqueio - <?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: #121519; --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; }
        body { margin: 0; font-family: 'Segoe UI', sans-serif; background-color: var(--bg-dark); color: var(--text-main); display: flex; height: 100vh; overflow: hidden; }
        
        /* MENU LATERAL PADRÃO */
        .sidebar { width: 260px; background-color: var(--bg-sidebar); display: flex; flex-direction: column; transition: 0.3s; border-right: 1px solid var(--border-color); 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: 14px; 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: 13px; border-left: none; }
        .arrow-icon { margin-left: auto; transition: 0.3s; font-size: 11px; }
        .rotate { transform: rotate(180deg); }
        .menu-category { padding: 20px 20px 8px; font-size: 10px; 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; }

        /* CONTEÚDO PRINCIPAL E RESPONSIVIDADE */
        .main-content { flex: 1; display: flex; flex-direction: column; overflow-y: auto; width: 100%; position: relative; }
        .topbar { display: flex; justify-content: flex-start; align-items: center; padding: 15px 20px; background-color: var(--bg-sidebar); border-bottom: 1px solid var(--border-color); gap: 15px; }
        .menu-toggle { display: none; background: none; border: none; color: white; font-size: 22px; cursor: pointer; padding: 5px; }
        .sidebar-overlay { display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.7); z-index: 1000; }
        .content-area { padding: 25px; flex: 1; max-width: 900px; margin: 0 auto; width: 100%; box-sizing: border-box; }

        /* ESTILOS ESPECÍFICOS DO BOTÃO DE PÂNICO */
        .card { background: var(--bg-card); border-radius: 12px; border: 1px solid var(--border-color); padding: 25px; margin-bottom: 25px; box-shadow: 0 4px 15px rgba(0,0,0,0.1); }
        .card h3 { margin-top: 0; color: white; border-bottom: 1px solid var(--border-color); padding-bottom: 15px; }
        
        .form-group { margin-bottom: 20px; }
        label { display: block; margin-bottom: 8px; font-size: 13px; font-weight: bold; color: var(--text-muted); }
        input { width: 100%; padding: 12px; background: #121519; border: 1px solid var(--border-color); color: white; border-radius: 8px; box-sizing: border-box; font-size: 14px;}
        input:focus { border-color: var(--accent); outline: none; }
        
        .btn-panic { background: var(--danger); color: white; border: none; padding: 20px; border-radius: 12px; cursor: pointer; font-weight: 800; width: 100%; font-size: 18px; text-transform: uppercase; letter-spacing: 2px; transition: 0.3s; margin-top: 10px; box-shadow: 0 10px 20px rgba(220, 53, 69, 0.3); }
        .btn-panic:hover { transform: scale(1.02); filter: brightness(1.2); }
        .btn-save { background: var(--accent); color: white; border: none; padding: 15px; border-radius: 8px; cursor: pointer; font-weight: bold; width: 100%; margin-top: 10px; font-size: 15px; transition: 0.2s;}
        .btn-save:hover { filter: brightness(1.1); box-shadow: 0 4px 15px rgba(0,123,255,0.2); }
        
        .btn-tutorial { background: #8b5cf6; color: white; border: none; padding: 12px; border-radius: 8px; cursor: pointer; font-weight: bold; transition: 0.2s; display: flex; align-items: center; gap: 8px; margin-top: 15px; width: 100%; justify-content: center; font-size: 14px; }
        .btn-tutorial:hover { background: #7c3aed; }

        .alert { padding: 15px; border-radius: 8px; 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); }
        
        .status-pill { display: inline-block; padding: 6px 15px; border-radius: 20px; background: rgba(243, 156, 18, 0.1); border: 1px solid var(--warning); color: var(--warning); font-size: 12px; font-weight: bold; margin-bottom: 20px; }

        /* MODAL TUTORIAL CLOUDFLARE */
        .modal-overlay-tutorial { display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.8); z-index: 2000; justify-content: center; align-items: center; backdrop-filter: blur(5px); }
        .modal-box { background: var(--bg-card); border: 1px solid var(--border-color); border-radius: 15px; padding: 30px; width: 90%; max-width: 600px; position: relative; box-shadow: 0 20px 40px rgba(0,0,0,0.5); }
        .modal-close { position: absolute; top: 15px; right: 20px; background: none; border: none; color: var(--text-muted); font-size: 24px; cursor: pointer; }
        .modal-close:hover { color: var(--danger); }
        .tutorial-content { text-align: left; color: var(--text-main); font-size: 14px; line-height: 1.6; max-height: 450px; overflow-y: auto; padding-right: 10px; }
        .tutorial-content h4 { color: var(--accent); margin-top: 15px; margin-bottom: 10px; border-bottom: 1px solid var(--border-color); padding-bottom: 10px; font-size: 16px; }
        .tutorial-content ol { padding-left: 20px; margin: 0; }
        .tutorial-content li { margin-bottom: 12px; }
        .tutorial-content strong { color: white; }

        @media (max-width: 768px) {
            .menu-toggle { display: block; }
            .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; }
            .content-area { padding: 15px; }
            .card { padding: 20px; }
        }
    </style>
</head> <body style="display:flex; flex-direction:row;"> <div class="sidebar-overlay" id="overlay" onclick="toggleMenu()"></div> <?php include 'sidebar.php'; ?>

    <div class="main-content">
        <header class="topbar">
            <div style="display:flex; align-items:center;">
                <button class="menu-toggle" onclick="toggleMenu()"><i class="fas fa-bars"></i></button>
                <h2 style="margin:0; font-size: 18px; color:white;"><i class="fas fa-shield-alt" style="color:var(--danger);"></i> Gestão de Crise Anti-Bloqueio</h2>
            </div>
        </header>

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

            <div class="card" style="border-left: 5px solid var(--danger);">
                <h3><i class="fas fa-exclamation-triangle" style="color:var(--danger);"></i> BOTÃO DE PÂNICO</h3>
                <p style="font-size: 13px; color: var(--text-muted); margin-bottom: 20px;">Use este botão <b>APENAS</b> se identificar que o seu domínio foi bloqueado pelas operadoras. Ao clicar, o painel mudará o IP do seu DNS no Cloudflare instantaneamente.</p>
                
                <div class="status-pill"><i class="fas fa-network-wired"></i> IP ATUAL NO DNS: <?php echo $cf['current_ip'] ?: 'Não identificado'; ?></div>

                <form method="POST" onsubmit="return confirm('ATENÇÃO: Você tem certeza que deseja migrar o tráfego agora?')">
                    <input type="hidden" name="action_panic" value="1">
                    <div class="form-group">
                        <label>IP do Servidor Reserva (Novo Destino)</label>
                        <input type="text" name="new_ip" placeholder="Ex: 154.23.11.90" required>
                    </div>
                    <button type="submit" class="btn-panic"><i class="fas fa-bolt"></i> EXECUTAR MIGRAÇÃO AGORA</button>
                </form>
            </div>

            <div class="card">
                <h3><i class="fab fa-cloudflare" style="color: #f39c12;"></i> Configurações da API Cloudflare</h3>
                <form method="POST">
                    <input type="hidden" name="action_save_cf" value="1">
                    <div class="form-group">
                        <label>API Token (Com permissão DNS:Edit)</label>
                        <input type="password" name="cf_token" value="<?php echo $cf['api_token']; ?>" placeholder="Cole o seu Token gerado no Cloudflare aqui">
                    </div>
                    <div class="form-group">
                        <label>Zone ID do Domínio</label>
                        <input type="text" name="cf_zone" value="<?php echo $cf['zone_id']; ?>" placeholder="Encontrado na página inicial do domínio no Cloudflare">
                    </div>
                    <div class="form-group">
                        <label>Registro DNS para Migrar (Ex: dns.meuservidor.com)</label>
                        <input type="text" name="cf_dns" value="<?php echo $cf['dns_name']; ?>" placeholder="O subdomínio exato que seus clientes usam para conectar">
                    </div>
                    <button type="submit" class="btn-save"><i class="fas fa-save"></i> SALVAR CHAVES DE SEGURANÇA</button>
                    
                    <button type="button" class="btn-tutorial" onclick="abrirTutorial()"><i class="fas fa-chalkboard-teacher"></i> Como configurar o Cloudflare?</button>
                </form>
            </div>
            <?php include 'rodape.php'; ?>
        </div>
    </div>

    <div class="modal-overlay-tutorial" id="modalTutorial">
        <div class="modal-box">
            <button class="modal-close" onclick="fecharTutorial()"><i class="fas fa-times"></i></button>
            <h3 style="margin-top: 0; color: white; border-bottom: 1px solid var(--border-color); padding-bottom: 15px; text-align: left;">
                <i class="fab fa-cloudflare" style="color: #f39c12;"></i> Passo a Passo: Cloudflare
            </h3>
            
            <div class="tutorial-content">
                <h4>1. Onde encontrar o Zone ID</h4>
                <ol>
                    <li>Acesse o <strong>Cloudflare</strong> e clique no seu domínio principal.</li>
                    <li>Role a página inicial (Overview) totalmente para baixo.</li>
                    <li>No canto inferior direito, procure pela seção <strong>API</strong>.</li>
                    <li>Copie a sequência do <strong>Zone ID</strong> e cole aqui no painel.</li>
                </ol>

                <h4>2. Como gerar o API Token</h4>
                <ol>
                    <li>Ainda no Cloudflare, clique no ícone do seu <strong>Perfil</strong> (canto superior direito) e vá em <strong>My Profile</strong>.</li>
                    <li>No menu à esquerda, clique na aba <strong>API Tokens</strong>.</li>
                    <li>Clique no botão azul <strong>Create Token</strong>.</li>
                    <li>Vá na opção <em>Edit zone DNS</em> e clique em <strong>Use template</strong>.</li>
                    <li>Na seção <em>Zone Resources</em> (logo no meio), escolha: <br><strong>Include</strong> | <strong>Specific zone</strong> | <em>Selecione o seu domínio</em>.</li>
                    <li>Desça até o final, clique em <strong>Continue to summary</strong> e depois em <strong>Create Token</strong>.</li>
                    <li><strong>Atenção:</strong> Copie a chave longa gerada. Ela só aparece uma vez. Cole no campo <strong>API Token</strong> aqui no painel.</li>
                </ol>

                <h4>3. O Registro DNS</h4>
                <p style="color: var(--text-muted); font-size: 13px;">No último campo, você deve digitar o nome exato do apontamento que seus clientes colocam no aplicativo.<br><br><b>Exemplo:</b> Se a URL do servidor for <code>http://tv.painel.top</code>, digite exatamente <strong>tv.painel.top</strong> na caixa.</p>
            </div>
        </div>
    </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 abrirTutorial() {
            document.getElementById('modalTutorial').style.display = 'flex';
        }

        function fecharTutorial() {
            document.getElementById('modalTutorial').style.display = 'none';
        }
        
        setTimeout(function() { 
            try { 
                var alerts = document.querySelectorAll('.alert'); 
                for(var i=0; i<alerts.length; i++) { alerts[i].style.opacity='0'; } 
                setTimeout(function(){ 
                    for(var j=0; j<alerts.length; j++) { alerts[j].style.display='none'; } 
                }, 500); 
            } catch(e) {} 
        }, 4000);
    </script>
    <script src="tema.js"></script>
</body>
</html>
