<?php 
header("Content-Type: application/xml; charset=utf-8");
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";

// Start URLSET with proper XML declaration
echo '<urlset
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:xhtml="http://www.w3.org/1999/xhtml"
      xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"
      xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . "\n";

include("admin/include/config.php");
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

$baseUrl = "https://www.wheelsbingo.com";

function formatSlug($text) {
    $slug = str_replace(' ', '-', strtolower(trim($text)));
    $slug = preg_replace('/[^a-z0-9._-]/', '', $slug);
    return $slug;
}

function outputUrl($loc, $lastmod = null, $priority = '0.8', $changefreq = 'weekly') {
    global $includedUrls;
    
    $normalizedLoc = rtrim(strtolower($loc), '/');
    
    if (!isset($includedUrls[$normalizedLoc])) {
        echo "  <url>\n";
        echo "    <loc>" . htmlspecialchars($loc, ENT_XML1) . "</loc>\n";

        // Validate and format lastmod
        $timestamp = strtotime($lastmod);
        if ($lastmod && $timestamp && $timestamp > 0) {
            $formattedDate = date('Y-m-d\TH:i:sP', $timestamp);
            echo "    <lastmod>$formattedDate</lastmod>\n";
        }

        echo "    <changefreq>" . htmlspecialchars($changefreq, ENT_XML1) . "</changefreq>\n";
        echo "    <priority>" . htmlspecialchars($priority, ENT_XML1) . "</priority>\n";
        echo "  </url>\n";

        $includedUrls[$normalizedLoc] = true;
    }
}

$includedUrls = [];

// Static pages with manually specified dates
$staticPages = [
    '/' => [
        'lastmod' => '2025-06-20T02:57:37+00:00',
        'priority' => '1.0', 
        'freq' => 'daily'
    ],
    '/contact' => [
        'lastmod' => '2025-06-10T01:17:37+00:00',
        'priority' => '0.9', 
        'freq' => 'monthly'
    ],
    '/privacy-policy' => [
        'lastmod' => '2025-06-10T06:19:37+00:00',
        'priority' => '0.9', 
        'freq' => 'monthly'
    ],
    '/blogs' => [
        'lastmod' => '2025-06-15T01:57:11+00:00',
        'priority' => '0.9',
        'freq' => 'weekly'
    ],
    '/blogs/cars' => [
        'lastmod' => '2025-06-15T09:34:22+00:00',
        'priority' => '0.8',
        'freq' => 'weekly'
    ],
    '/blogs/bike-and-scooters' => [
        'lastmod' => '2025-06-15T05:13:08+00:00',
        'priority' => '0.8',
        'freq' => 'weekly'
    ],
    '/car-listing' => [
        'lastmod' => '2025-06-18T18:47:00+00:00',
        'priority' => '0.9',
        'freq' => 'weekly'
    ],
    '/bikes-and-scooters-listing' => [
        'lastmod' => '2025-06-18T10:22:44+00:00',
        'priority' => '0.9',
        'freq' => 'weekly'
    ],
    '/brands' => [
        'lastmod' => '2025-06-18T03:38:12+00:00',
        'priority' => '0.9',
        'freq' => 'weekly'
    ],
    '/body-type' => [
        'lastmod' => '2025-06-18T21:59:33+00:00',
        'priority' => '0.9',
        'freq' => 'weekly'
    ],
    '/car-compare-listing' => [
        'lastmod' => '2025-06-17T05:04:58+00:00',
        'priority' => '0.8',
        'freq' => 'weekly'
    ],
    '/news-listing' => [
        'lastmod' => '2025-06-17T16:12:47+00:00',
        'priority' => '0.8',
        'freq' => 'weekly'
    ],
    '/bikes-and-scooters-listing/new' => [
        'lastmod' => '2025-06-16T02:19:08+00:00',
        'priority' => '0.8',
        'freq' => 'weekly'
    ],
    '/bikes-and-scooters-listing/upcoming' => [
        'lastmod' => '2025-06-16T22:45:30+00:00',
        'priority' => '0.8',
        'freq' => 'weekly'
    ],
    '/car-listing/upcoming' => [
        'lastmod' => '2025-06-16T19:01:00+00:00',
        'priority' => '0.8',
        'freq' => 'weekly'
    ],
    '/car-listing/new' => [
        'lastmod' => '2025-06-16T09:12:22+00:00',
        'priority' => '0.8',
        'freq' => 'weekly'
    ],
    '/car-listing/electric' => [
        'lastmod' => '2025-06-16T15:34:49+00:00',
        'priority' => '0.8',
        'freq' => 'weekly'
    ],
    '/news-listing/cars' => [
        'lastmod' => '2025-06-15T20:09:15+00:00',
        'priority' => '0.8',
        'freq' => 'weekly'
    ],
    '/news-listing/bike-and-scooters' => [
        'lastmod' => '2025-06-15T04:48:05+00:00',
        'priority' => '0.8',
        'freq' => 'weekly'
    ]
];

foreach ($staticPages as $url => $settings) {
    outputUrl(
        $baseUrl . $url, 
        $settings['lastmod'], 
        $settings['priority'], 
        $settings['freq']
    );
}

// Database queries and URL generation
$resBrands = mysqli_query($conn, "SELECT DISTINCT brand FROM cars WHERE status=1 AND approve=1");
if ($resBrands) {
    while ($brandRow = mysqli_fetch_assoc($resBrands)) {
        $brandName = trim($brandRow['brand']);
        $brandSlug = formatSlug($brandName);

        $brandQuery = mysqli_query($conn, "SELECT updated_at, created_at FROM cars WHERE brand='" . mysqli_real_escape_string($conn, $brandName) . "' ORDER BY updated_at DESC LIMIT 1");
        $brandData = mysqli_fetch_assoc($brandQuery);
        $lastmodBrand = $brandData['updated_at'] ?: $brandData['created_at'];

        outputUrl("$baseUrl/cars/$brandSlug/", $lastmodBrand, '0.8', 'weekly');

        $resModels = mysqli_query($conn, "SELECT name, slug_url FROM cars WHERE brand='" . mysqli_real_escape_string($conn, $brandName) . "' AND status=1 AND approve=1 GROUP BY name");
        if ($resModels) {
            while ($modelRow = mysqli_fetch_assoc($resModels)) {
                $modelName = trim($modelRow['name']);
                $modelSlug = $modelRow['slug_url'] ?: formatSlug($modelName);

                $modelQuery = mysqli_query($conn, "SELECT updated_at, created_at FROM cars WHERE brand='" . mysqli_real_escape_string($conn, $brandName) . "' AND name='" . mysqli_real_escape_string($conn, $modelName) . "' ORDER BY updated_at DESC LIMIT 1");
                $modelData = mysqli_fetch_assoc($modelQuery);
                $lastmodModel = $modelData['updated_at'] ?: $modelData['created_at'];

                outputUrl("$baseUrl/cars/$brandSlug/$modelSlug", $lastmodModel, '0.8', 'weekly');

                $resVariants = mysqli_query($conn, "SELECT DISTINCT variant, updated_at, created_at FROM cars WHERE brand='" . mysqli_real_escape_string($conn, $brandName) . "' AND name='" . mysqli_real_escape_string($conn, $modelName) . "' AND status=1 AND approve=1 AND variant != ''");
                if ($resVariants) {
                    while ($variantRow = mysqli_fetch_assoc($resVariants)) {
                        $variantName = trim($variantRow['variant']);
                        
                        if (strcasecmp($variantName, $modelName) === 0) {
                            continue;
                        }
                        
                        $variantSlug = formatSlug($variantName);
                        $lastmodVariant = $variantRow['updated_at'] ?: $variantRow['created_at'];

                        outputUrl("$baseUrl/cars/$brandSlug/$modelSlug/$variantSlug", $lastmodVariant, '0.7', 'weekly');
                    }
                    mysqli_free_result($resVariants);
                }
            }
            mysqli_free_result($resModels);
        }
    }
    mysqli_free_result($resBrands);
}

$resBrands = mysqli_query($conn, "SELECT DISTINCT brand FROM bikes WHERE status=1 AND approve=1");
if ($resBrands) {
    while ($brandRow = mysqli_fetch_assoc($resBrands)) {
        $brandName = trim($brandRow['brand']);
        $brandSlug = formatSlug($brandName);

        $brandQuery = mysqli_query($conn, "SELECT updated_at, created_at FROM bikes WHERE brand='" . mysqli_real_escape_string($conn, $brandName) . "' ORDER BY updated_at DESC LIMIT 1");
        $brandData = mysqli_fetch_assoc($brandQuery);
        $lastmodBrand = $brandData['updated_at'] ?: $brandData['created_at'];

        outputUrl("$baseUrl/bikes-and-scooters/$brandSlug/", $lastmodBrand, '0.8', 'weekly');

        $resModels = mysqli_query($conn, "SELECT name, slug_url FROM bikes WHERE brand='" . mysqli_real_escape_string($conn, $brandName) . "' AND status=1 AND approve=1 GROUP BY name");
        if ($resModels) {
            while ($modelRow = mysqli_fetch_assoc($resModels)) {
                $modelName = trim($modelRow['name']);
                $modelSlug = $modelRow['slug_url'] ?: formatSlug($modelName);

                $modelQuery = mysqli_query($conn, "SELECT updated_at, created_at FROM bikes WHERE brand='" . mysqli_real_escape_string($conn, $brandName) . "' AND name='" . mysqli_real_escape_string($conn, $modelName) . "' ORDER BY updated_at DESC LIMIT 1");
                $modelData = mysqli_fetch_assoc($modelQuery);
                $lastmodModel = $modelData['updated_at'] ?: $modelData['created_at'];

                outputUrl("$baseUrl/bikes-and-scooters/$brandSlug/$modelSlug", $lastmodModel, '0.8', 'weekly');

                $resVariants = mysqli_query($conn, "SELECT DISTINCT variant, updated_at, created_at FROM bikes WHERE brand='" . mysqli_real_escape_string($conn, $brandName) . "' AND name='" . mysqli_real_escape_string($conn, $modelName) . "' AND status=1 AND approve=1 AND variant != ''");
                if ($resVariants) {
                    while ($variantRow = mysqli_fetch_assoc($resVariants)) {
                        $variantName = trim($variantRow['variant']);
                        
                        if (strcasecmp($variantName, $modelName) === 0) {
                            continue;
                        }
                        
                        $variantSlug = formatSlug($variantName);
                        $lastmodVariant = $variantRow['updated_at'] ?: $variantRow['created_at'];

                        outputUrl("$baseUrl/bikes-and-scooters/$brandSlug/$modelSlug/$variantSlug", $lastmodVariant, '0.7', 'weekly');
                    }
                    mysqli_free_result($resVariants);
                }
            }
            mysqli_free_result($resModels);
        }
    }
    mysqli_free_result($resBrands);
}

$seenBlogCategories = [];
$resBlogs = mysqli_query($conn, "SELECT title, slug_url, updated_at, created_at, category FROM blogs WHERE status=1 AND approve=1");
if ($resBlogs) {
    while ($row = mysqli_fetch_assoc($resBlogs)) {
        $blogSlug = $row['slug_url'] ?: formatSlug($row['title']);
        $lastmod = $row['updated_at'] ?: $row['created_at'];
        outputUrl("$baseUrl/blog/$blogSlug", $lastmod, '0.67', 'weekly');

        $categorySlug = formatSlug($row['category']);
        if (!in_array($categorySlug, $seenBlogCategories)) {
            $catQuery = mysqli_query($conn, "SELECT updated_at, created_at FROM blogs WHERE category='" . mysqli_real_escape_string($conn, $row['category']) . "' AND status=1 AND approve=1 ORDER BY updated_at DESC LIMIT 1");
            $catData = mysqli_fetch_assoc($catQuery);
            $catLastmod = $catData['updated_at'] ?: $catData['created_at'];

            outputUrl("$baseUrl/blogs/$categorySlug", $catLastmod, '0.67', 'weekly');
            $seenBlogCategories[] = $categorySlug;
        }
    }
    mysqli_free_result($resBlogs);
}

$seenNewsCategories = [];
$resNews = mysqli_query($conn, "SELECT title, slug_url, updated_at, created_at, category FROM news WHERE status=1 AND approve=1");
if ($resNews) {
    while ($row = mysqli_fetch_assoc($resNews)) {
        $newsSlug = $row['slug_url'] ?: formatSlug($row['title']);
        $lastmod = $row['updated_at'] ?: $row['created_at'];
        outputUrl("$baseUrl/news/$newsSlug", $lastmod, '0.67', 'weekly');

        $categorySlug = formatSlug($row['category']);
        if (!in_array($categorySlug, $seenNewsCategories)) {
            $catQuery = mysqli_query($conn, "SELECT updated_at, created_at FROM news WHERE category='" . mysqli_real_escape_string($conn, $row['category']) . "' AND status=1 AND approve=1 ORDER BY updated_at DESC LIMIT 1");
            $catData = mysqli_fetch_assoc($catQuery);
            $catLastmod = $catData['updated_at'] ?: $catData['created_at'];

            outputUrl("$baseUrl/news-listing/$categorySlug", $catLastmod, '0.67', 'weekly');
            $seenNewsCategories[] = $categorySlug;
        }
    }
    mysqli_free_result($resNews);
}

mysqli_close($conn);

// Close the urlset tag
echo "</urlset>\n";
?>