<?php
// A SESSÃO DEVE SER A PRIMEIRA COISA DO ARQUIVO
if (session_status() === PHP_SESSION_NONE) {
    session_start();
}

require_once 'config.php';
$pdo = getConexaoAtiva();
$pdo->exec("SET NAMES utf8mb4");

// =========================================================================
// INTELIGÊNCIA ARTIFICIAL: DETECTA A TABELA DE CLIENTES (XUI vs XTREAM) E COLUNAS
// =========================================================================
$tabela_clientes = 'users'; // Padrão Xtream UI
try {
    $check_tabela = $pdo->query("SHOW TABLES LIKE 'lines'");
    if ($check_tabela && $check_tabela->fetch()) {
        $tabela_clientes = '`lines`'; // Padrão XUI One
    }
} catch (Exception $e) {}

$tem_nome_cliente = false;
$tem_is_p2p = false;
try {
    // Varredura para evitar o erro de coluna inexistente ao inserir o teste
    $check_cols = $pdo->query("SHOW COLUMNS FROM $tabela_clientes");
    while ($col = $check_cols->fetch(PDO::FETCH_ASSOC)) {
        if (strtolower($col['Field']) == 'nome_cliente') $tem_nome_cliente = true;
        if (strtolower($col['Field']) == 'is_p2p') $tem_is_p2p = true;
    }
} catch (Exception $e) {}

// =========================================================================
// CONFIGURAÇÃO DOS BOUQUETS (IPTV)
// =========================================================================
$id_bouquet_completo = 1;     // ID do "Pacote | Completo"
$id_bouquet_sem_adultos = 2;  // ID do "Pacote | Completo S/Adultos"

// =========================================================================
// INÍCIO: SISTEMA DE SEGURANÇA E ANTI-BOT
// =========================================================================
$ip_cliente = $_SERVER['REMOTE_ADDR'] ?? '0.0.0.0';

try {
    $pdo->exec("CREATE TABLE IF NOT EXISTS ip_bloqueados_teste (
        id INT AUTO_INCREMENT PRIMARY KEY,
        ip VARCHAR(50) NOT NULL,
        motivo VARCHAR(255),
        data_bloqueio DATETIME DEFAULT CURRENT_TIMESTAMP
    )");
    $pdo->exec("CREATE TABLE IF NOT EXISTS log_ip_testes (
        id INT AUTO_INCREMENT PRIMARY KEY,
        ip VARCHAR(50),
        email VARCHAR(100),
        data_registro DATETIME DEFAULT CURRENT_TIMESTAMP
    )");

    $checkIpBlock = $pdo->prepare("SELECT motivo FROM ip_bloqueados_teste WHERE ip = ?");
    $checkIpBlock->execute([$ip_cliente]);
    if ($checkIpBlock->rowCount() > 0) {
        $motivo_bloqueio = $checkIpBlock->fetchColumn();
        die("
        <style>body{background:#0f1115;color:#fff;display:flex;align-items:center;justify-content:center;height:100vh;text-align:center;font-family:sans-serif;}</style>
        <div>
            <h1 style='font-size: 5rem; color: #e74c3c; margin-bottom: 0;'>🚫</h1>
            <h2 style='font-weight: bold; margin-top: 10px;'>ACESSO BLOQUEADO</h2>
            <p style='color: #8a94a1;'>Seu IP foi bloqueado por segurança devido a atividades suspeitas.</p>
            <p style='color: #e74c3c; font-size: 0.85rem;'>Motivo: {$motivo_bloqueio}</p>
        </div>");
    }
} catch(Exception $e) {}

// =========================================================================
// BUSCA CONFIGURAÇÕES DO PAINEL SAAS (Cores, Logo, Nome)
// =========================================================================
$nome_painel = "TOP IPTV"; 
$cor_primaria = "#007bff"; 
$logo_url = "";
$dominio_atual = $_SERVER['HTTP_HOST'];
$url_iptv = "http://" . $dominio_atual . ":80"; // URL Padrão do IPTV

try {
    $pdo_interno = getConexaoInterna();
    if ($pdo_interno->query("SHOW TABLES LIKE 'painel_config'")->rowCount() > 0) {
        $config_painel = $pdo_interno->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;
            $cor_primaria = !empty($config_painel['cor_primaria']) ? $config_painel['cor_primaria'] : $cor_primaria;
            if (!empty($config_painel['logo_url'])) {
                $logo_url = preg_match('/^http/', $config_painel['logo_url']) ? $config_painel['logo_url'] : ltrim($config_painel['logo_url'], '/');
            }
        }
    }
} catch (Exception $e) { }

// =========================================================================
// LÓGICA DE IDENTIFICAÇÃO DO REVENDEDOR E API (MULTITENANT)
// =========================================================================
$member_id = 1; // ID 1 é o Admin (Padrão)
$link_user = 'admin'; 
$whatsapp_revendedor = "Não configurado"; 

$wa_url = ''; $wa_key = ''; $wa_inst = ''; $wa_status = 0;

if (isset($_GET['r'])) {
    $link_user = preg_replace('/[^a-zA-Z0-9_]/', '', base64_decode($_GET['r']));
    try {
        $stmtRev = $pdo->prepare("SELECT id, wa_api_url, wa_api_key, wa_instancia, wa_status FROM reg_users WHERE username = ? LIMIT 1");
        $stmtRev->execute([$link_user]);
        $dados_rev = $stmtRev->fetch(PDO::FETCH_ASSOC);
        
        if ($dados_rev) { 
            $member_id = $dados_rev['id']; 
            
            // Puxa as configs da API desse revendedor específico
            $wa_url = $dados_rev['wa_api_url'] ?? '';
            $wa_key = $dados_rev['wa_api_key'] ?? '';
            $wa_inst = $dados_rev['wa_instancia'] ?? '';
            $wa_status = (int)($dados_rev['wa_status'] ?? 0);
        }
    } catch (Exception $e) {}
}

$link_painel_cliente = "https://" . $dominio_atual . "/clientes"; 

try {
    $stmtWppConfig = $pdo_interno->prepare("SELECT whatsapp FROM whatsapp_config WHERE CadUser = ? LIMIT 1");
    $stmtWppConfig->execute([$link_user]);
    $wpp_banco = $stmtWppConfig->fetchColumn();
    if (!empty($wpp_banco)) { $whatsapp_revendedor = $wpp_banco; }
} catch (Exception $e) {}

$msg = ""; $msg_tipo = ""; $dados_exibir = null;

// =========================================================================
// O DISPARADOR INVISÍVEL (EVOLUTION API V1/V2 E Z-API)
// =========================================================================
function enviarMsgZapInvisivelGerador($numero, $mensagem, $wa_url, $wa_key, $wa_inst, $wa_status) {
    if ($wa_status == 0 || empty($wa_url)) return false;
    
    $numero = preg_replace('/\D/', '', $numero);
    if(empty($numero)) return false;
    if (strlen($numero) == 10 || strlen($numero) == 11) { $numero = "55" . $numero; }
    
    $endpoint = rtrim($wa_url, '/');
    if(strpos($endpoint, '/message/sendText') === false) { 
        $endpoint = $endpoint . "/message/sendText/" . $wa_inst; 
    }
    
    $dados = [ 
        "number" => $numero, 
        "options" => [ "delay" => 1200, "presence" => "composing" ],
        "textMessage" => [ "text" => $mensagem ]
    ];
    
    $ch = curl_init($endpoint);
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true, 
        CURLOPT_POST => true, 
        CURLOPT_POSTFIELDS => json_encode($dados),
        CURLOPT_HTTPHEADER => [
            "Content-Type: application/json", 
            "apikey: ".$wa_key,
            "Authorization: Bearer ".$wa_key
        ], 
        CURLOPT_TIMEOUT => 5,
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_SSL_VERIFYHOST => false
    ]);
    $res = curl_exec($ch); 
    curl_close($ch); 
    return $res;
}

// =========================================================================
// PROCESSAMENTO DO FORMULÁRIO
// =========================================================================
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    
    $is_fraude = false;
    $motivo_banimento = "";

    if (!empty($_POST['telefone_fixo'])) {
        $is_fraude = true;
        $motivo_banimento = "Robô Detectado (Honeypot acionado)";
    }

    if (!$is_fraude) {
        $checkAbuso = $pdo->prepare("SELECT COUNT(*) FROM log_ip_testes WHERE ip = ? AND data_registro >= DATE_SUB(NOW(), INTERVAL 24 HOUR)");
        $checkAbuso->execute([$ip_cliente]);
        $qtd_testes = $checkAbuso->fetchColumn();

        if ($qtd_testes >= 2) {
            $is_fraude = true;
            $motivo_banimento = "Abuso do gerador (Mais de 2 testes em 24h)";
        }
    }

    if ($is_fraude) {
        $ban = $pdo->prepare("INSERT INTO ip_bloqueados_teste (ip, motivo) VALUES (?, ?)");
        $ban->execute([$ip_cliente, $motivo_banimento]);
        die("<script>window.location.reload();</script>"); 
    }

    $nome_cli = strip_tags($_POST['nome']);
    $pacote_escolhido = $_POST['pacote']; 
    
    // Formata o WhatsApp
    $wpp_cliente = preg_replace('/[^0-9]/', '', $_POST['whatsapp_cliente']);
    if (strlen($wpp_cliente) == 10 || strlen($wpp_cliente) == 11) {
        $wpp_cliente = "55" . $wpp_cliente;
    }
    
    // Procura na tabela correta
    $check = $pdo->prepare("SELECT id FROM $tabela_clientes WHERE admin_notes LIKE ?");
    $check->execute(["%".$wpp_cliente."%"]);
    
    if ($check->rowCount() > 0) {
        $msg = "Atenção: Este WhatsApp já foi utilizado para gerar um teste hoje."; $msg_tipo = "warning";
    } else {

        if ($pacote_escolhido === 'sem_adultos') {
            $bouquets_final = json_encode([(string)$id_bouquet_sem_adultos]); 
        } else {
            $bouquets_final = json_encode([(string)$id_bouquet_completo]); 
        }

        $user_t = "teste" . rand(10000, 99999);
        $pass_t = rand(10000, 99999);
        
        $venc_timestamp = strtotime("+4 hours"); 
        $venc_formatado = date('d/m/Y H:i', $venc_timestamp);
        
        $notas_admin = "Teste Gerado | WPP: {$wpp_cliente} | Nome: {$nome_cli}";

        try {
            // Monta o INSERT dinâmico com base nas colunas que o banco suporta
            $campos = ['member_id', 'username', 'password', 'exp_date', 'max_connections', 'enabled', 'admin_enabled', 'bouquet', 'admin_notes'];
            $valores = [$member_id, $user_t, $pass_t, $venc_timestamp, 1, 1, 1, $bouquets_final, $notas_admin];
            $placeholders = ['?', '?', '?', '?', '?', '?', '?', '?', '?'];

            if ($tem_nome_cliente) {
                $campos[] = 'nome_cliente';
                $valores[] = $nome_cli;
                $placeholders[] = '?';
            }
            if ($tem_is_p2p) {
                $campos[] = 'is_p2p';
                $valores[] = 0;
                $placeholders[] = '?';
            }

            $sql = "INSERT INTO $tabela_clientes (" . implode(', ', $campos) . ") VALUES (" . implode(', ', $placeholders) . ")";
            $pdo->prepare($sql)->execute($valores);
            
            $pdo->prepare("INSERT INTO log_ip_testes (ip, email) VALUES (?, ?)")->execute([$ip_cliente, $wpp_cliente]);

            $dados_exibir = [
                'user' => $user_t, 
                'pass' => $pass_t, 
                'venc' => $venc_formatado, 
                'url'  => $url_iptv,
                'zap_cliente' => $wpp_cliente
            ];
            
            // FORMATA MENSAGEM PADRÃO
            $wpp_msg_texto = "🚀 *ACESSO GERADO - TESTE 4H*\n\n👤 *Usuário:* {$user_t}\n🔑 *Senha:* {$pass_t}\n📅 *Vence em:* {$venc_formatado}\n\n🌐 *URL/DNS:* {$url_iptv}\n\n🔄 *COMO RENOVAR SEU ACESSO:*\nAcesse nossa Área do Cliente pelo link abaixo:\n🔗 {$link_painel_cliente}\n\nEntre com este mesmo usuário e senha, escolha o plano e pague via PIX. A renovação cai *NA HORA*!\n\n📞 *Suporte:* {$whatsapp_revendedor}";

            if ($wa_status == 1 && !empty($wa_url)) {
                // DISPARO INVISÍVEL VIA API
                enviarMsgZapInvisivelGerador($wpp_cliente, $wpp_msg_texto, $wa_url, $wa_key, $wa_inst, $wa_status);
                $msg = "Teste Gerado e Enviado para o seu WhatsApp!"; 
                $msg_tipo = "success";
                $dados_exibir['modo_envio'] = 'invisivel';
            } else {
                // REDIRECIONAMENTO MANUAL
                $msg = "Teste Gerado com Sucesso! Redirecionando para o WhatsApp..."; 
                $msg_tipo = "success";
                $dados_exibir['modo_envio'] = 'redirecionamento';
            }

        } catch (Exception $e) {
            $msg = "Erro ao gerar teste no banco de dados. " . $e->getMessage(); 
            $msg_tipo = "danger";
        }
    }
}
?>
<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Gerador de Teste Automático</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
    <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet">
    <style>
        :root { --primary: <?= $cor_primaria ?>; }
        body { background-color: #0f1114; background-image: radial-gradient(circle at top right, rgba(255,255,255,0.05) 0%, transparent 40%); color: #fff; min-height: 100vh; display: flex; align-items: center; justify-content: center; font-family: 'Segoe UI', sans-serif; padding: 20px; }
        .card-teste { background: #1e2227; border: 1px solid #3a4149; border-radius: 15px; padding: 35px; width: 100%; max-width: 480px; box-shadow: 0 10px 40px rgba(0,0,0,0.6); }
        .logo-img { max-width: 200px; max-height: 70px; object-fit: contain; margin-bottom: 20px; }
        .form-control, .form-select { background: #121519 !important; border: 1px solid #3a4149 !important; color: #ffffff !important; height: 50px; }
        .form-control:focus, .form-select:focus { border-color: var(--primary) !important; box-shadow: none !important; }
        .form-control::placeholder { color: #8a94a1 !important; }
        .btn-primary { background: var(--primary); border: none; font-weight: bold; height: 50px; transition: 0.3s; width: 100%; }
        .btn-primary:hover { filter: brightness(1.15); transform: translateY(-2px); }
        .info-box { background: #121519; border: 1px solid #3a4149; border-radius: 10px; padding: 20px; }
        .text-resumo { color: var(--primary); font-weight: bold; font-family: monospace; font-size: 1.1rem; }
        label { color: #8a94a1 !important; font-weight: bold; margin-bottom: 5px; font-size: 0.85rem; text-transform: uppercase; }
        .aviso-informativo { background: rgba(0, 123, 255, 0.1); border: 1px dashed var(--primary); border-radius: 8px; padding: 15px; font-size: 0.85rem; color: #d1d5da; text-align: center; margin-bottom: 20px; }
        
        .box-instrucoes { background: rgba(0,0,0,0.4); border-radius: 8px; border-left: 4px solid var(--primary); padding: 15px; margin-top: 20px; text-align: left; font-size: 0.85rem; line-height: 1.5; }
        .box-instrucoes a { color: var(--primary); font-weight: bold; text-decoration: none; word-break: break-all; }
        
        .armadilha-robo { display: none !important; opacity: 0; position: absolute; left: -9999px; }
        
        .spinner-red { display: inline-block; width: 1rem; height: 1rem; vertical-align: text-bottom; border: .2em solid currentColor; border-right-color: transparent; border-radius: 50%; animation: spinner-border .75s linear infinite; margin-right: 8px;}
        @keyframes spinner-border { to { transform: rotate(360deg); } }
    </style>
</head>
<body>

<div class="card-teste">
    <div class="text-center mb-4">
        <?php if(!empty($logo_url)): ?>
            <img src="<?= htmlspecialchars($logo_url) ?>" alt="Logo" class="logo-img">
        <?php else: ?>
            <i class="fas fa-tv fa-3x mb-2" style="color: var(--primary);"></i>
            <h3 class="fw-bold text-white"><?= htmlspecialchars($nome_painel) ?></h3>
        <?php endif; ?>
        <p class="small" style="color: #8a94a1;">Gerador de Teste Automático (4H)</p>
    </div>

    <?php if($msg): ?>
        
        <?php if($msg_tipo == 'success'): ?>
            <div class="alert text-center border-0 fw-bold shadow-sm" style="background: rgba(40,167,69,0.15); color: #28a745; border: 1px solid #28a745 !important;">
                <?php if($dados_exibir['modo_envio'] === 'redirecionamento'): ?>
                    <span class="spinner-red"></span>
                <?php endif; ?>
                <?= $msg ?>
            </div>
        <?php else: ?>
            <div class="alert alert-<?= $msg_tipo ?> text-center border-0 fw-bold shadow-sm"><?= $msg ?></div>
        <?php endif; ?>

        <?php if($dados_exibir): ?>
            <div class="info-box mb-4 shadow-lg">
                <div class="mb-2"><label>USUÁRIO:</label><div class="text-resumo"><?= $dados_exibir['user'] ?></div></div>
                <div class="mb-2"><label>SENHA:</label><div class="text-resumo"><?= $dados_exibir['pass'] ?></div></div>
                <div class="mb-2"><label>VENCIMENTO:</label><div class="text-white fw-bold"><?= $dados_exibir['venc'] ?></div></div>
                <hr style="border-color: #3a4149;">
                <div class="mb-2"><label>URL / DNS:</label><div class="text-white small fw-bold"><?= $dados_exibir['url'] ?></div></div>
                
                <div class="box-instrucoes">
                    <span class="d-block text-white fw-bold mb-2"><i class="fas fa-sync-alt me-1" style="color:var(--primary);"></i> COMO RENOVAR</span>
                    <span style="color:#d1d5da;">Acesse a Área do Cliente pelo link:</span><br>
                    <a href="<?= $link_painel_cliente ?>" target="_blank"><?= $link_painel_cliente ?></a><br><br>
                    <span style="color:#d1d5da;">Entre com este mesmo <b>Usuário</b> e <b>Senha</b>. Escolha um plano e pague via PIX.</span><br><br>
                    <span style="color:#28a745;" class="fw-bold"><i class="fab fa-whatsapp me-1"></i> Suporte: <?= htmlspecialchars($whatsapp_revendedor) ?></span>
                </div>
            </div>
            
            <div class="d-flex gap-2">
                <button class="btn btn-secondary w-50 fw-bold border-0" style="background: #3a4149;" onclick="copiarDados()"><i class="fas fa-copy me-2"></i> COPIAR DADOS</button>
                <button class="btn btn-success w-50 fw-bold border-0" style="background: #25D366;" onclick="enviarWhatsManual()"><i class="fab fa-whatsapp me-2"></i> WHATSAPP</button>
            </div>
            
            <?php if($dados_exibir['modo_envio'] === 'redirecionamento'): ?>
                <div class="text-center mt-3 small" style="color: #8a94a1;">
                    Não foi redirecionado? Clique no botão verde acima.
                </div>
            <?php endif; ?>

            <script>
                function getMensagemFormatada() {
                    return `🚀 *ACESSO GERADO - TESTE 4H*\n\n` +
                           `👤 *Usuário:* <?= $dados_exibir['user'] ?>\n` +
                           `🔑 *Senha:* <?= $dados_exibir['pass'] ?>\n` +
                           `📅 *Vence em:* <?= $dados_exibir['venc'] ?>\n\n` +
                           `🌐 *URL/DNS:* <?= $dados_exibir['url'] ?>\n\n` +
                           `🔄 *COMO RENOVAR SEU ACESSO:*\n` +
                           `Acesse nossa Área do Cliente pelo link abaixo:\n` +
                           `🔗 <?= $link_painel_cliente ?>\n\n` +
                           `Entre com este mesmo usuário e senha, escolha o plano e pague via PIX. A renovação cai *NA HORA*!\n\n` +
                           `📞 *Suporte:* <?= htmlspecialchars($whatsapp_revendedor) ?>`;
                }

                const numeroCliente = "<?= $dados_exibir['zap_cliente'] ?>";
                const textoFormatado = encodeURIComponent(getMensagemFormatada());
                const linkZap = `https://api.whatsapp.com/send?phone=${numeroCliente}&text=${textoFormatado}`;

                <?php if($dados_exibir['modo_envio'] === 'redirecionamento'): ?>
                setTimeout(() => {
                    window.location.href = linkZap;
                }, 1500);
                <?php endif; ?>

                function enviarWhatsManual() {
                    window.open(linkZap, '_blank');
                }

                function copiarDados() {
                    navigator.clipboard.writeText(getMensagemFormatada()).then(() => alert("Todos os dados copiados!"));
                }
            </script>
        <?php endif; ?>
        
    <?php else: ?>
        <form method="POST">
            <input type="text" name="telefone_fixo" class="armadilha-robo" tabindex="-1" autocomplete="off" placeholder="Deixe em branco se for humano">
            
            <div class="mb-3">
                <label>Seu Nome</label>
                <input type="text" name="nome" class="form-control" placeholder="Ex: João Silva" required>
            </div>
            
            <div class="mb-3">
                <label>Seu WhatsApp (DDD + Número)</label>
                <input type="text" name="whatsapp_cliente" class="form-control" placeholder="Ex: 11999999999" required minlength="10" maxlength="15">
            </div>
            
            <div class="mb-4">
                <label>Pacote de Canais</label>
                <select name="pacote" class="form-select" required>
                    <option value="completo">🔥 Pacote Completo (Com Adultos)</option>
                    <option value="sem_adultos" selected>🛡️ Pacote Kids (Sem Adultos)</option>
                </select>
            </div>

            <div class="aviso-informativo">
                <i class="fas fa-info-circle me-1"></i> Preencha corretamente. Você receberá os dados no seu WhatsApp.
            </div>
            <button type="submit" class="btn btn-primary fw-bold">GERAR ACESSO AGORA</button>
        </form>
    <?php endif; ?>
</div>

</body>
</html>
