<?php
/**
 * Configurações de Rastreamento
 * 
 * Este arquivo contém as configurações e funções relacionadas ao rastreamento
 * e integração com serviços de análise e marketing.
 * 
 * @package CursosGratuitos
 */

// Previne acesso direto ao arquivo
if (!defined('BASE_PATH')) {
    die('Acesso direto não permitido');
}

// Define constantes para configurações de rastreamento
define('TRACKING_ENABLED', true);
define('GA_ENABLED', true);
define('GSC_ENABLED', true);
define('ADSENSE_ENABLED', true);
define('FB_PIXEL_ENABLED', false);

// IDs das plataformas
define('GA_MEASUREMENT_ID', 'G-DBJJKQVH21');
define('GSC_VERIFICATION_ID', 'xTJxTpXxP1PsUtC4UlEliwKwhYKkNy_HnyahzGnKLrY');
define('ADSENSE_CLIENT_ID', 'ca-pub-9919806376063326');
define('ADSENSE_ADS_TXT', 'google.com, pub-9919806376063326, DIRECT, f08c47fec0942fa0');
define('FB_PIXEL_ID', 'XXXXXXXXXXXXXXX');

/**
 * Retorna o código do Google Analytics
 * 
 * @return string Código HTML para incluir o Google Analytics
 */
function getGoogleAnalyticsCode() {
    if (!TRACKING_ENABLED || !GA_ENABLED) {
        return '<!-- Google Analytics desativado -->';
    }
    
    return '<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=' . GA_MEASUREMENT_ID . '"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag(\'js\', new Date());

  gtag(\'config\', \'' . GA_MEASUREMENT_ID . '\');
</script>';
}

/**
 * Retorna o código do Google Search Console
 * 
 * @return string Meta tag para verificação do Google Search Console
 */
function getGoogleSearchConsoleCode() {
    if (!TRACKING_ENABLED || !GSC_ENABLED) {
        return '<!-- Google Search Console desativado -->';
    }
    
    return '<meta name="google-site-verification" content="' . GSC_VERIFICATION_ID . '" />';
}

/**
 * Retorna o código do Google AdSense
 * 
 * @return string Código HTML para incluir o Google AdSense
 */
function getGoogleAdSenseCode() {
    if (!TRACKING_ENABLED || !ADSENSE_ENABLED) {
        return '<!-- Google AdSense desativado -->';
    }
    
    return '<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=' . ADSENSE_CLIENT_ID . '"
     crossorigin="anonymous"></script>';
}

/**
 * Retorna o código do bloco de anúncio do AdSense
 * 
 * @param string $slotId ID do slot do anúncio
 * @return string Código HTML para incluir um bloco de anúncio
 */
function getAdSenseAdUnit($slotId) {
    if (!TRACKING_ENABLED || !ADSENSE_ENABLED) {
        return '<!-- Google AdSense desativado -->';
    }
    
    return '<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="' . ADSENSE_CLIENT_ID . '"
     data-ad-slot="' . $slotId . '"
     data-ad-format="auto"
     data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>';
}

/**
 * Retorna o código do Facebook Pixel
 * 
 * @return string Código HTML para incluir o Facebook Pixel
 */
function getFacebookPixelCode() {
    if (!TRACKING_ENABLED || !FB_PIXEL_ENABLED) {
        return '<!-- Facebook Pixel desativado -->';
    }
    
    return '<!-- Meta Pixel Code -->
<script>
!function(f,b,e,v,n,t,s)
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version=\'2.0\';
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s)}(window, document,\'script\',
\'https://connect.facebook.net/en_US/fbevents.js\');
fbq(\'init\', \'' . FB_PIXEL_ID . '\');
fbq(\'track\', \'PageView\');
</script>
<noscript><img height="1" width="1" style="display:none"
src="https://www.facebook.com/tr?id=' . FB_PIXEL_ID . '&ev=PageView&noscript=1"
/></noscript>
<!-- End Meta Pixel Code -->';
}

/**
 * Registra evento de conversão no Facebook Pixel
 * 
 * @param string $event Nome do evento
 * @param array $params Parâmetros adicionais (opcional)
 * @return string Código JavaScript para registrar o evento
 */
function trackFacebookEvent($event, $params = []) {
    if (!TRACKING_ENABLED || !FB_PIXEL_ENABLED) {
        return '<!-- Rastreamento do Facebook desativado -->';
    }
    
    $paramsJson = !empty($params) ? json_encode($params) : '{}';
    
    return '<script>
if (typeof fbq !== "undefined") {
    fbq("track", "' . $event . '", ' . $paramsJson . ');
}
</script>';
}

/**
 * Gera o arquivo ads.txt na raiz do site
 * 
 * @return bool True se o arquivo foi criado com sucesso, False caso contrário
 */
function generateAdsTxt() {
    if (!TRACKING_ENABLED || !ADSENSE_ENABLED) {
        return false;
    }
    
    $content = ADSENSE_ADS_TXT;
    $adsPath = rtrim(BASE_PATH, '/') . '/ads.txt';
    
    // Adiciona comentário no topo do arquivo
    $content = "# Arquivo ads.txt gerado automaticamente\n# Última atualização: " . date('Y-m-d H:i:s') . "\n\n" . $content;
    
    return file_put_contents($adsPath, $content) !== false;
}

/**
 * Verifica e cria o arquivo robots.txt se não existir
 * 
 * @return bool True se o arquivo foi criado, False se já existia ou houve erro
 */
function checkRobotsTxt() {
    $robotsPath = rtrim(BASE_PATH, '/') . '/robots.txt';
    
    if (file_exists($robotsPath)) {
        return false;
    }
    
    $siteUrl = defined('SITE_URL') ? SITE_URL : 'https://example.com';
    $content = "# Arquivo robots.txt gerado automaticamente\n";
    $content .= "# Última atualização: " . date('Y-m-d H:i:s') . "\n\n";
    $content .= "User-agent: *\n";
    $content .= "Allow: /\n\n";
    $content .= "# Sitemaps\n";
    $content .= "Sitemap: " . rtrim($siteUrl, '/') . "/sitemap.xml\n";
    
    return file_put_contents($robotsPath, $content) !== false;
}

/**
 * Verifica o status de configuração dos sistemas de rastreamento
 * 
 * @return array Status dos diferentes sistemas de rastreamento
 */
function checkTrackingSetup() {
    $status = [
        'ga' => false,
        'gsc' => false,
        'adsense' => false,
        'fb_pixel' => false,
        'ads_txt' => false,
        'robots_txt' => false
    ];
    
    // Verifica configuração do Google Analytics
    $status['ga'] = TRACKING_ENABLED && GA_ENABLED && GA_MEASUREMENT_ID !== 'G-XXXXXXXXXX';
    
    // Verifica configuração do Google Search Console
    $status['gsc'] = TRACKING_ENABLED && GSC_ENABLED && GSC_VERIFICATION_ID !== 'XXXXXXXXXXXXXXXXXXXX';
    
    // Verifica configuração do Google AdSense
    $status['adsense'] = TRACKING_ENABLED && ADSENSE_ENABLED && ADSENSE_CLIENT_ID !== 'ca-pub-XXXXXXXXXXXXXXXX';
    
    // Verifica configuração do Facebook Pixel
    $status['fb_pixel'] = TRACKING_ENABLED && FB_PIXEL_ENABLED && FB_PIXEL_ID !== 'XXXXXXXXXXXXXXX';
    
    // Verifica existência do arquivo ads.txt
    $adsPath = rtrim(BASE_PATH, '/') . '/ads.txt';
    $status['ads_txt'] = file_exists($adsPath);
    
    // Verifica existência do arquivo robots.txt
    $robotsPath = rtrim(BASE_PATH, '/') . '/robots.txt';
    $status['robots_txt'] = file_exists($robotsPath);
    
    return $status;
}

/**
 * Adiciona os códigos de rastreamento no cabeçalho HTML
 * 
 * @return void
 */
function addTrackingHeaderCodes() {
    if (!TRACKING_ENABLED) {
        return;
    }
    
    // Google Search Console
    if (GSC_ENABLED) {
        echo getGoogleSearchConsoleCode() . "\n";
    }
    
    // Google Analytics
    if (GA_ENABLED) {
        echo getGoogleAnalyticsCode() . "\n";
    }
    
    // Google AdSense
    if (ADSENSE_ENABLED) {
        echo getGoogleAdSenseCode() . "\n";
    }
    
    // Facebook Pixel
    if (FB_PIXEL_ENABLED) {
        echo getFacebookPixelCode() . "\n";
    }
}

/**
 * Registra visualização de página
 * 
 * @param int $pageId ID da página visualizada
 * @return bool True se o registro foi bem-sucedido, False caso contrário
 */
function trackPageView($pageId) {
    global $db;
    
    if (!is_numeric($pageId) || !$db) {
        return false;
    }
    
    try {
        $db->query("INSERT INTO page_views (page_id, visitor_ip, user_agent, viewed_at) 
                   VALUES (:page_id, :visitor_ip, :user_agent, NOW())");
        
        $db->bind(':page_id', $pageId);
        $db->bind(':visitor_ip', $_SERVER['REMOTE_ADDR'] ?? null);
        $db->bind(':user_agent', $_SERVER['HTTP_USER_AGENT'] ?? null);
        
        return $db->execute();
    } catch (Exception $e) {
        error_log("Erro ao registrar visualização de página: " . $e->getMessage());
        return false;
    }
}

/**
 * Registra acompanhamento de curso/fluxo
 * 
 * @param int $cursoId ID do curso
 * @param string $pagina Tipo de página (landing, step1, step2, ...)
 * @param string $redirecionamento Tipo de redirecionamento (proximo, whatsapp, oficial)
 * @return bool True se o registro foi bem-sucedido, False caso contrário
 */
function trackCursoFlow($cursoId, $pagina, $redirecionamento = null) {
    global $db;
    
    if (!is_numeric($cursoId) || !$db) {
        return false;
    }
    
    try {
        $db->query("INSERT INTO rastreamento (curso_id, pagina, ip, session_id, redirecionamento, data_acesso) 
                   VALUES (:curso_id, :pagina, :ip, :session_id, :redirecionamento, NOW())");
        
        $db->bind(':curso_id', $cursoId);
        $db->bind(':pagina', $pagina);
        $db->bind(':ip', $_SERVER['REMOTE_ADDR'] ?? null);
        $db->bind(':session_id', session_id());
        $db->bind(':redirecionamento', $redirecionamento);
        
        return $db->execute();
    } catch (Exception $e) {
        error_log("Erro ao registrar rastreamento de curso: " . $e->getMessage());
        return false;
    }
}