<?php 

// die('<meta http-equiv="refresh" content="0; url=rifa/">');
function verificarOrigemIP($ip) {
    $apiUrl = "http://ip-api.com/json/" . $ip;
    $dadosIP = @file_get_contents($apiUrl);

    if ($dadosIP) {
        $dadosIP = json_decode($dadosIP, true);
        if (isset($dadosIP['status']) && $dadosIP['status'] === 'success') {
            return [
                'isp' => $dadosIP['isp'] ?? 'ISP não disponível',
                'org' => $dadosIP['org'] ?? 'Organização não disponível',
                'mobile' => $dadosIP['mobile'] ?? false,
                'proxy' => $dadosIP['proxy'] ?? false
            ];
        }
    }

    return [
        'isp' => 'Dados indisponíveis',
        'org' => 'Dados indisponíveis',
        'mobile' => false,
        'proxy' => false
    ];
}

// Função para verificar se o usuário é permitido (não bot e não desktop)
function verificarPermissaoUsuario($userAgent) {
    // Lista de bots conhecidos
    $bots = ['bot', 'crawl', 'slurp', 'spider', 'mediapartners', 'bingbot', 'googlebot', 'yandexbot'];
    $userAgentLower = strtolower($userAgent);

    // Verificar se o User-Agent contém palavras-chave de bots
    foreach ($bots as $bot) {
        if (strpos($userAgentLower, $bot) !== false) {
            return false; // Bloqueia bots
        }
    }

    // Verificar se é um dispositivo móvel
    $dispositivosMoveis = ['mobile', 'android', 'iphone', 'ipad', 'ipod'];
    foreach ($dispositivosMoveis as $dispositivo) {
        if (strpos($userAgentLower, $dispositivo) !== false) {
            return true; // Permite dispositivos móveis
        }
    }

    return false; // Bloqueia desktops
}

// Função para capturar as informações do visitante
function capturarInformacoesVisitante() {
    $informacoes = [];

    // Capturar IP real do visitante considerando o uso de Cloudflare
    if (isset($_SERVER['HTTP_CF_CONNECTING_IP'])) {
        $informacoes['ip'] = $_SERVER['HTTP_CF_CONNECTING_IP'];
    } else {
        $informacoes['ip'] = $_SERVER['REMOTE_ADDR'] ?? 'IP não disponível';
    }

    // Capturar host solicitado
    $informacoes['host'] = $_SERVER['HTTP_HOST'] ?? 'Host não disponível';

    // Capturar referer (domínio de onde veio)
    $informacoes['referer'] = $_SERVER['HTTP_REFERER'] ?? 'Referer não disponível';

    // Capturar URI requisitada (diretório que o IP está tentando acessar)
    $informacoes['uri'] = $_SERVER['REQUEST_URI'] ?? 'URI não disponível';

    // Capturar método HTTP usado (GET, POST, etc.)
    $informacoes['metodo_http'] = $_SERVER['REQUEST_METHOD'] ?? 'Método não disponível';

    // Capturar protocolo (HTTP/HTTPS)
    $informacoes['protocolo'] = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'HTTPS' : 'HTTP';

    // Capturar User-Agent
    $informacoes['user_agent'] = $_SERVER['HTTP_USER_AGENT'] ?? 'User-Agent não disponível';

    // Capturar data e hora da requisição
    $informacoes['timestamp'] = date('Y-m-d H:i:s');

    // Capturar local de redirecionamento, se existir
    $informacoes['redirecionamento'] = $_SERVER['REDIRECT_URL'] ?? 'Não redirecionado';

    // Verificar origem do IP
    $origemIP = verificarOrigemIP($informacoes['ip']);
    $informacoes['isp'] = $origemIP['isp'];
    $informacoes['org'] = $origemIP['org'];
    $informacoes['mobile'] = $origemIP['mobile'];
    $informacoes['proxy'] = $origemIP['proxy'];

    return $informacoes;
}

// Caminho dos arquivos onde os dados serão armazenados
$arquivoLog = 'fglogs.json';
$arquivoBloqueados = 'bloqueados.json';

// Capturar as informações do visitante
$informacoesVisitante = capturarInformacoesVisitante();

// Verificar permissão do usuário
if (!verificarPermissaoUsuario($informacoesVisitante['user_agent'])) {
    // Registrar informações no arquivo de bloqueados
    $conteudoBloqueados = [];
    if (file_exists($arquivoBloqueados)) {
        $conteudoBloqueados = json_decode(file_get_contents($arquivoBloqueados), true);
        if (!is_array($conteudoBloqueados)) {
            $conteudoBloqueados = [];
        }
    }

    // Adicionar motivo de bloqueio
    $informacoesVisitante['motivo_bloqueio'] = (strpos(strtolower($informacoesVisitante['user_agent']), 'bot') !== false) ? 'Bot detectado' : 'Dispositivo desktop';

    $conteudoBloqueados[] = $informacoesVisitante;

    // Salvar as informações atualizadas no arquivo de bloqueados
    file_put_contents($arquivoBloqueados, json_encode($conteudoBloqueados, JSON_PRETTY_PRINT));

    // Responder com erro 404
    http_response_code(404);
    echo '
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL was not found on this server.</p>
<hr>
<address>Apache/2.4.58 (Win64) OpenSSL/3.1.3 PHP/8.2.12 Server at 00.|.00.|.00 Port 80</address>
</body></html>
';
    exit;
}

// Ler o conteúdo atual do arquivo de logs, se existir
$conteudoAtual = [];
if (file_exists($arquivoLog)) {
    $conteudoAtual = json_decode(file_get_contents($arquivoLog), true);
    if (!is_array($conteudoAtual)) {
        $conteudoAtual = [];
    }
}

// Adicionar as novas informações ao conteúdo atual
$conteudoAtual[] = $informacoesVisitante;

// Salvar as informações atualizadas no arquivo de logs
file_put_contents($arquivoLog, json_encode($conteudoAtual, JSON_PRETTY_PRINT));
