<?php
const GRID_COLUMNS = 3;
const ATIVAR_LOGO_MODAL = true;
const VERSION_CACHE = '2024_12_14_18_4';

session_start();
$required_files = [
    "admin/services/database.php",
    "admin/services/funcao.php", 
    "admin/services/crud.php",
    "admin/services/CSRF_Protect.php",
    "admin/services/pega-ip.php",
    "admin/services/ip-crawler.php"
];

foreach ($required_files as $file) {
    if (file_exists($file)) {
        include_once($file);
    } else {
        error_log("Arquivo não encontrado: $file");
    }
}

$csrf = new CSRF_Protect();

/**
 * Processa parâmetros de ADS
 */
if (!function_exists('getAdsType')) {
    function getAdsType() {
        return isset($_GET['utm_ads']) && !empty($_GET['utm_ads']) 
            ? PHP_SEGURO($_GET['utm_ads']) 
            : null;
    }
}

/**
 * Obtém URL atual
 */
if (!function_exists('getCurrentUrl')) {
    function getCurrentUrl() {
        $protocol = isset($_SERVER['HTTPS']) ? "https" : "http";
        return "{$protocol}://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}";
    }
}

/**
 * Registra visita no site
 */
if (!function_exists('registerVisit')) {
    function registerVisit($mysqli, $ip, $browser, $os) {
        global $data_us;
        
        $data_hoje = date("Y-m-d");
        $hora_hoje = date("H:i:s");
        $ref = $_SERVER['HTTP_REFERER'] ?? getCurrentUrl();
        $ads_tipo = getAdsType();
        $data_us = ip_F($ip);
        
        if ($browser === "Unknown Browser" || 
            $os === "Unknown OS Platform" || 
            $data_us['pais'] !== "Brazil") {
            return;
        }
        
        $sql_check = $mysqli->prepare("SELECT ip_visita FROM visita_site WHERE data_cad=? AND ip_visita=?");
        if ($sql_check) {
            $sql_check->bind_param("ss", $data_hoje, $ip);
            $sql_check->execute();
            $sql_check->store_result();
            
            if ($sql_check->num_rows === 0) {
                $sql_insert = $mysqli->prepare("INSERT INTO visita_site (nav_os,mac_os,ip_visita,refer_visita,data_cad,hora_cad,id_user,pais,cidade,estado,ads_tipo) VALUES (?,?,?,?,?,?,?,?,?,?,?)");
                if ($sql_insert) {
                    $id_user_ret = "1";
                    $sql_insert->bind_param("sssssssssss", 
                        $browser, $os, $ip, $ref, $data_hoje, $hora_hoje, 
                        $id_user_ret, $data_us['pais'], $data_us['cidade'], 
                        $data_us['regiao'], $ads_tipo
                    );
                    $sql_insert->execute();
                    $sql_insert->close();
                }
            }
            $sql_check->close();
        }
    }
}

/**
 * Obtém configurações do site
 */
if (!function_exists('getSiteConfig')) {
    function getSiteConfig($mysqli) {
        $defaults = [
            'nome' => 'Plataforma',
            'favicon' => '/uploads/favicon.png',
            'facebookads' => ''
        ];
        
        $query = "SELECT nome, favicon, facebookads FROM config WHERE id = 1";
        $result = $mysqli->query($query);
        
        if ($result && $result->num_rows > 0) {
            $row = $result->fetch_assoc();
            return array_merge($defaults, array_filter($row));
        }
        
        return $defaults;
    }
}

/**
 * Processa redirecionamentos de erro
 */
if (!function_exists('handleErrorRedirects')) {
    function handleErrorRedirects() {
        if (!isset($_GET['error']) || !isset($_GET['redirect'])) {
            return;
        }
        
        $error_code = $_GET['error'];
        
        if (isset($_SERVER['HTTP_REFERER']) && 
            strpos($_SERVER['HTTP_REFERER'], 'deposit-details') !== false) {
            header('Location: /deposit');
            exit;
        }
        error_log("Erro $error_code redirecionado - Referer: " . ($_SERVER['HTTP_REFERER'] ?? 'Nenhum'));
    }
}

/**
 * Gera meta tags dinamicamente
 */
if (!function_exists('generateMetaTags')) {
    function generateMetaTags($config) {
        $nome = htmlspecialchars($config['nome']);
        $favicon = htmlspecialchars($config['favicon']);
        
        return [
            'title' => $nome,
            'description' => "Entre no universo de apostas, jogue slots, tigrinhos e descubra a emoção de ganhar no {$nome}.",
            'keywords' => 'cassino, apostas online, slots, tigrinho, jogos de apostas, diversão',
            'og_title' => "{$nome} | Jogos Slots e Apostas",
            'og_image' => "uploads/{$favicon}",
            'og_url' => "https://{$nome}"
        ];
    }
}

// Executa as funções principais
if (isset($mysqli, $ip, $browser, $os)) {
    registerVisit($mysqli, $ip, $browser, $os);
}

$config = isset($mysqli) ? getSiteConfig($mysqli) : [
    'nome' => 'Plataforma',
    'favicon' => '/uploads/favicon.png', 
    'facebookads' => ''
];

handleErrorRedirects();
$meta = generateMetaTags($config);
?>
<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=0,viewport-fit=cover">
    <title><?= $meta['title'] ?></title>
    <meta name="description" content="<?= $meta['description'] ?>">
    <meta name="keywords" content="<?= $meta['keywords'] ?>">
    
    <!-- Favicon e ícones -->
    <link rel="icon" href="uploads/<?= $config['favicon'] ?>" type="image/png">
    <link rel="apple-touch-icon" href="uploads/<?= $config['favicon'] ?>">
    
    <!-- Meta tags do Facebook/OpenGraph -->
    <meta property="og:title" content="<?= $meta['og_title'] ?>">
    <meta property="og:description" content="<?= $meta['description'] ?>">
    <meta property="og:image" content="<?= $meta['og_image'] ?>">
    <meta property="og:type" content="website">
    <meta property="og:url" content="<?= $meta['og_url'] ?>">
    <meta property="og:image:width" content="1200">
    <meta property="og:image:height" content="600">
    <meta property="og:updated_time" content="1734170657">
    
    <!-- Meta tags do Twitter -->
    <meta name="twitter:card" content="summary_large_image">
    <meta name="twitter:title" content="<?= $meta['og_title'] ?>">
    <meta name="twitter:description" content="<?= $meta['description'] ?>">
    <meta name="twitter:image" content="/xxxx/h5/share_image.jpg">
    <meta name="twitter:url" content="/xxxx/h5/share_image.jpg">
    <meta name="twitter:type" content="website">
    <meta name="twitter:image:width" content="1200">
    <meta name="twitter:image:height" content="600">
    <meta name="twitter:updated_time" content="1734170657">
    
    <!-- CSS e Scripts externos -->
    <script src="/xxxx/prod/config.js?v=<?= VERSION_CACHE ?>"></script>
    <script src="/ssss/theme.php?v=<?= VERSION_CACHE ?>"></script>
    <link rel="stylesheet" href="<?= SITE_URL ?>/yq-br-prod/web1/css/index.css?v=<?= VERSION_CACHE ?>">
    <link rel="stylesheet" href="/ssss/start_page.css?v=<?= VERSION_CACHE ?>">
    <link rel="stylesheet" href="estilo.css">
    
    <!-- Scripts de terceiros -->
    <script src="https://accounts.google.com/gsi/client" async defer></script>
    <script async defer crossorigin="anonymous" src="https://connect.facebook.net/en_US/sdk.js#xfbml=1&version=v20.0" nonce="s2QYaSCr"></script>
    
    <style>
        /* Preloader - ESSENCIAL para funcionamento */
        #preloader {
            position: fixed;
            width: 100%;
            height: 100%;
            background: var(--theme-top-bar);
            display: flex;
            justify-content: center;
            align-items: center;
            z-index: 9999;
        }
        #preloader img {
            width: 300px;
            max-width: 80%;
        }
        
        /* Grid personalizado */
        ._itemBox_1p4p2_55 ._itemsContainer_1p4p2_230,
        ._typeGameBox_trpke_55 ._gameBox_trpke_146 {
            display: grid !important;
            grid-template-columns: repeat(<?= GRID_COLUMNS ?>, 1fr) !important;
            gap: 8px !important;
            padding: 10px !important;
            width: 100% !important;
            box-sizing: border-box !important;
        }
        
        ._typeGameBox_trpke_55 ._gameBox_trpke_146 {
            margin-bottom: 24rem !important;
        }
        
        .grid-dynamic-override {
            grid-template-columns: repeat(<?= GRID_COLUMNS ?>, 1fr) !important;
        }
    </style>
    
    <!-- Script de carregamento dinâmico - RESTAURADO DO ORIGINAL -->
    <script type="text/javascript">
        (function() {
            var timer = null;
            timer = setInterval(function() {
                var temp = '<script type="module" crossorigin src="<?= SITE_URL ?>/yq-br-prod/web1/assets/index-CXpt7Cav-<?= VERSION_CACHE ?>.js">____script><link rel="modulepreload" crossorigin href="<?= SITE_URL ?>/yq-br-prod/web1/assets/icons-Cdaou_E3-<?= VERSION_CACHE ?>.js"><link rel="modulepreload" crossorigin href="<?= SITE_URL ?>/yq-br-prod/web1/assets/comps-B8ShbmG--<?= VERSION_CACHE ?>.js"><link rel="stylesheet" crossorigin href="<?= SITE_URL ?>/yq-br-prod/web1/assets/comps-DLgBMKMA-<?= VERSION_CACHE ?>.css"><link rel="stylesheet" crossorigin href="<?= SITE_URL ?>/yq-br-prod/web1/assets/icons-CxwRDrrn-<?= VERSION_CACHE ?>.css"><link rel="stylesheet" crossorigin href="<?= SITE_URL ?>/yq-br-prod/web1/assets/index-D1UCb5so-<?= VERSION_CACHE ?>.css"><script type="module">import.meta.url;import("_").catch(()=>1);(async function*(){})().next();if(location.protocol!="file:"){window.__vite_is_modern_browser=true}____script><script type="module">!function(){if(window.__vite_is_modern_browser)return;console.warn("vite: loading legacy chunks, syntax error above and the same error below should be ignored");var e=document.getElementById("vite-legacy-polyfill"),n=document.createElement("script");n.src=e.src,n.onload=function(){System.import(document.getElementById("vite-legacy-entry").getAttribute("data-src"))},document.body.appendChild(n)}();____script>';
                var div = document.createElement("div");
                div.style.width = "0px";
                div.style.height = "0px";
                div.style.display = "none";
                var body = document.body;
                if (body) {
                    clearInterval(timer);
                    document.body.appendChild(div);
                    var range = document.createRange();
                    range.selectNode(div);
                    var doc = range.createContextualFragment(
                        temp.replace(/____/g, "<\/")
                    );
                    div.appendChild(doc);
                }
            }, 0);
        })();
    </script>
</head>

<body>
    <!-- Preloader - RESTAURADO -->
    <div id="preloader">
        <img src="uploads/favicon.png.webp" alt="Carregando...">
    </div>
    
    <div id="root"></div>
    <div id="logRegBlock"></div>
    
    <div id="start_page">
        <img id="start_page_img" 
             src="/ssss/start_page_img.webp" 
             onerror="this.onerror=null;this.src='/xxxx/h5/favicon.png'">
    </div>

    <!-- Script principal com todas as funcionalidades -->
    <script>
        const CONFIG = {
            gridColumns: <?= GRID_COLUMNS ?>,
            ativarLogoModal: <?= ATIVAR_LOGO_MODAL ? 'true' : 'false' ?>,
            version: '<?= VERSION_CACHE ?>'
        };
        
        // Força colunas do grid
        function forceGridColumns() {
            const containers1 = document.querySelectorAll('._itemBox_1p4p2_55 ._itemsContainer_1p4p2_230');
            const containers2 = document.querySelectorAll('._typeGameBox_trpke_55 ._gameBox_trpke_146');
            
            containers1.forEach(container => {
                container.style.setProperty('grid-template-columns', `repeat(${CONFIG.gridColumns}, 1fr)`, 'important');
                container.classList.add('grid-dynamic-override');
            });
            
            containers2.forEach(container => {
                container.style.setProperty('grid-template-columns', `repeat(${CONFIG.gridColumns}, 1fr)`, 'important');
                container.classList.add('grid-dynamic-override');
            });
        }
        
        // Observer para grid
        const gridObserver = new MutationObserver(() => {
            forceGridColumns();
        });
        
        // Logo no modal
        <?php if (ATIVAR_LOGO_MODAL): ?>
        if (CONFIG.ativarLogoModal) {
            function inserirLogoNoModal(container) {
                //console.log('Modal encontrado:', container);
                
                if (!container.querySelector('.logo-inserida')) {
                    const bloco = document.createElement('div');
                    bloco.className = 'logo-inserida';
                    bloco.style.textAlign = 'center';
                    bloco.style.padding = '20px 10px 10px';
                    bloco.innerHTML = `
                        <img src="uploads/logo.png.webp?v=<?= time(); ?>" style="width: 100px; margin: auto; display: block; padding-bottom: 15px;">
                        <h2 style="font-weight: bold; color: #fff; margin-top: 10px; font-size: 18px; line-height: 1.4;">
                            Cadastre-se e ganhe R$7.777<br>
                            <span style="font-weight: normal;">Convide outras pessoas e ganhe R$ 1 milhão</span>
                        </h2>
                    `;
                    
                    const titleBox = container.querySelector('._titleBox_12w2x_92');
                    if (titleBox) {
                        container.insertBefore(bloco, titleBox);
                    } else {
                        container.prepend(bloco);
                    }
                    
                    //console.log('Logo inserido com sucesso');
                }
            }
            
            const modalObserver = new MutationObserver((mutations) => {
                mutations.forEach((mutation) => {
                    if (mutation.addedNodes.length) {
                        mutation.addedNodes.forEach((node) => {
                            if (node.nodeType === 1) {
                                if (node.matches('div._loginBox_12w2x_55')) {
                                    inserirLogoNoModal(node);
                                } else {
                                    const modal = node.querySelector('div._loginBox_12w2x_55');
                                    if (modal) inserirLogoNoModal(modal);
                                }
                            }
                        });
                    }
                    
                    if (mutation.type === 'attributes' && mutation.target.matches('div._loginBox_12w2x_55')) {
                        inserirLogoNoModal(mutation.target);
                    }
                });
            });
            
            document.addEventListener('DOMContentLoaded', () => {
                const modalExistente = document.querySelector('div._loginBox_12w2x_55');
                if (modalExistente) {
                    inserirLogoNoModal(modalExistente);
                }
                
                modalObserver.observe(document.body, {
                    childList: true,
                    subtree: true,
                    attributes: true,
                    attributeFilter: ['class', 'style']
                });
                
                //console.log('Observer iniciado para detectar o modal');
            });
        }
        <?php endif; ?>
        
        // Funções de saldo
        // Funções de saldo corrigidas
        const getCookie = (name) => {
            const cookies = document.cookie.split(';');
            
            for (let i = 0; i < cookies.length; i++) {
                let cookie = cookies[i].trim();
                if (cookie.startsWith(name + '=')) {
                    return cookie.substring(name.length + 1);
                }
            }
            return null;
        };
        
        const atualizaSaldo = () => {
            //console.log("=== INICIANDO ATUALIZAÇÃO DE SALDO ===");
            
            // Para debug, vamos sempre tentar fazer a requisição mesmo sem token no JS
            // porque vimos que a API está funcionando via cookie HTTP
            
            const url = '/api/member/balance';
            
            //console.log("Fazendo requisição para:", url);
            
            fetch(url, {
                method: 'GET',
                headers: {
                    'Content-Type': 'application/json',
                    'Cache-Control': 'no-cache'
                },
                credentials: 'include', // CRUCIAL: inclui cookies
                cache: 'no-cache'
            })
                .then(response => {
                    //console.log("Status da resposta:", response.status);
                    //console.log("Response OK:", response.ok);
                    
                    if (!response.ok) {
                        return response.text().then(text => {
                            //console.error("Resposta de erro:", text);
                            throw new Error(`Status: ${response.status} - ${text}`);
                        });
                    }
                    return response.json();
                })
                .then(data => {
                    //console.log("=== DADOS RECEBIDOS DA API ===");
                    //console.log("Resposta completa:", data);
                    //console.log("Status:", data.status);
                    //console.log("Data:", data.data);
                    
                    // Verifica a estrutura correta da resposta
                    if (data.status === true && data.data) {
                        //console.log("UID:", data.data.uid);
                        //console.log("Balance:", data.data.balance);
                        //console.log("Lock Amount:", data.data.lock_amount);
                        
                        // Salva o saldo no localStorage
                        localStorage.setItem('user_balance', data.data.balance);
                        //console.log("✅ Saldo salvo no localStorage:", data.data.balance);
                        
                        // Chama a função de refresh
                        //console.log("Chamando clickRefreshBalance...");
                        clickRefreshBalance();
                        
                        //console.log("=== ATUALIZAÇÃO CONCLUÍDA COM SUCESSO ===");
                    } else {
                        //console.error("❌ Estrutura de dados inesperada:");
                        //console.error("Status:", data.status);
                        //console.error("Data:", data.data);
                    }
                })
                .catch((error) => {
                    //console.error("❌ ERRO ao atualizar saldo:");
                    //console.error("Tipo do erro:", typeof error);
                    //console.error("Mensagem:", error.message);
                    //console.error("Stack:", error.stack);
                });
        };
        
        const clickRefreshBalance = () => {
            //console.log("=== PROCURANDO BOTÕES DE REFRESH ===");
            
            const refreshButtons = document.querySelectorAll('[class*="_freshBox_"]');
            //console.log("Botões encontrados com '_freshBox_':", refreshButtons.length);
            
            refreshButtons.forEach((button, index) => {
                console.log(`Analisando botão ${index + 1}:`);
                //console.log("  - Elemento:", button);
                //console.log("  - Classes:", button.className);
                
                const svg = button.querySelector('svg');
                const moneyBox = button.closest('[class*="_moneyBox_"]');
                
                //console.log("  - Tem SVG:", !!svg);
                //console.log("  - Está em moneyBox:", !!moneyBox);
                
                if (svg && moneyBox) {
                    //console.log("  ✅ Clicando no botão de atualização do saldo");
                    
                    // Simula um clique real
                    const event = new MouseEvent('click', {
                        view: window,
                        bubbles: true,
                        cancelable: true
                    });
                    
                    button.dispatchEvent(event);
                    //console.log("  ✅ Evento de clique disparado");
                } else {
                    //console.log("  ❌ Botão não atende aos critérios");
                }
            });
            
            //console.log("=== FIM DA BUSCA POR BOTÕES ===");
        };
        
        // Função de teste manual
        const testeCompleto = () => {
            //console.log("=== TESTE COMPLETO ===");
            //console.log("1. Verificando cookies...");
            //console.log("Todos os cookies:", document.cookie);
            
            //console.log("2. Testando atualização de saldo...");
            atualizaSaldo();
            
            //console.log("3. Verificando localStorage...");
            setTimeout(() => {
                //console.log("user_balance no localStorage:", localStorage.getItem('user_balance'));
            }, 2000);
        };
        
        // Heartbeat
        function sendHeartbeat() {
            fetch('admin/online_heartbeat.php', {
                credentials: 'include'
            });
        }
        
        // Inicialização
        document.addEventListener('DOMContentLoaded', () => {
            //console.log("✅ Página carregada, iniciando sistema...");
            
            forceGridColumns();
            gridObserver.observe(document.body, {
                childList: true,
                subtree: true
            });
            
            // Teste inicial
            setTimeout(() => {
                //console.log("Fazendo primeiro teste de saldo...");
                atualizaSaldo();
            }, 1000);
        });
        
        // RESTAURADO: Script do preloader
        setTimeout(function() {
            document.getElementById("preloader").style.display = "none";
            const conteudo = document.getElementById("conteudo");
            if (conteudo) {
                conteudo.style.display = "block";
            }
        }, 100);
        
        // Intervalos
        setInterval(forceGridColumns, 1000);
        setInterval(atualizaSaldo, 5000); // 5 segundos para facilitar o debug
        sendHeartbeat();
        setInterval(sendHeartbeat, 15000);
    </script>

    <!-- Scripts legados necessários - RESTAURADOS -->
    <script nomodule>
        !(function() {
            var e = document,
                t = e.createElement("script");
            if (!("noModule" in t) && "onbeforeload" in t) {
                var n = !1;
                e.addEventListener(
                    "beforeload",
                    function(e) {
                        if (e.target === t) n = !0;
                        else if (!e.target.hasAttribute("nomodule") || !n) return;
                        e.preventDefault();
                    },
                    !0
                ),
                (t.type = "module"),
                (t.src = "."),
                e.head.appendChild(t),
                t.remove();
            }
        })();
    </script>
    
    <script nomodule crossorigin id="vite-legacy-polyfill" src="<?= SITE_URL ?>/yq-br-prod/web1/assets/polyfills-legacy-CaA53fb3-<?= VERSION_CACHE ?>.js"></script>
    <script nomodule crossorigin id="vite-legacy-entry" data-src="<?= SITE_URL ?>/yq-br-prod/web1/assets/index-legacy-A9U20HDf-<?= VERSION_CACHE ?>.js">
        System.import(document.getElementById("vite-legacy-entry").getAttribute("data-src"));
    </script>
</body>
</html>