<?php
/**
 * Dynamic Sitemap Generator
 * Generates XML sitemap for search engines
 */

require_once __DIR__ . '/bootstrap.php';

// Set content type to XML
header('Content-Type: application/xml; charset=utf-8');

// Get base URL
$baseUrl = rtrim(APP_URL, '/');

// Get database instance
$db = Database::getInstance();

// Get current date/time in W3C format
$lastmod = date('Y-m-d\TH:i:s+00:00');

// Start XML output
echo '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . "\n";

// Function to output URL entry
function outputUrl($loc, $priority = '0.8', $changefreq = 'monthly', $lastmod = null) {
    global $baseUrl;
    if ($lastmod === null) {
        global $lastmod;
        $lastmod = date('Y-m-d\TH:i:s+00:00');
    }
    echo "  <url>\n";
    echo "    <loc>" . htmlspecialchars($loc, ENT_XML1, 'UTF-8') . "</loc>\n";
    echo "    <lastmod>" . htmlspecialchars($lastmod, ENT_XML1, 'UTF-8') . "</lastmod>\n";
    echo "    <changefreq>" . htmlspecialchars($changefreq, ENT_XML1, 'UTF-8') . "</changefreq>\n";
    echo "    <priority>" . htmlspecialchars($priority, ENT_XML1, 'UTF-8') . "</priority>\n";
    echo "  </url>\n";
}

// Homepage (highest priority)
outputUrl($baseUrl . '/', '1.0', 'daily');

// Main static pages (high priority)
outputUrl($baseUrl . '/about', '0.9', 'monthly');
outputUrl($baseUrl . '/vision-mission', '0.8', 'monthly');
outputUrl($baseUrl . '/services', '0.9', 'weekly');
outputUrl($baseUrl . '/industries', '0.8', 'monthly');
outputUrl($baseUrl . '/case-studies', '0.8', 'weekly');
outputUrl($baseUrl . '/careers', '0.7', 'weekly');
outputUrl($baseUrl . '/blog', '0.8', 'daily');
outputUrl($baseUrl . '/testimonials', '0.7', 'monthly');
outputUrl($baseUrl . '/reviews', '0.7', 'daily');
outputUrl($baseUrl . '/gallery', '0.7', 'weekly');
outputUrl($baseUrl . '/contact', '0.8', 'monthly');
outputUrl($baseUrl . '/privacy-policy', '0.3', 'yearly');
outputUrl($baseUrl . '/cookie-policy', '0.3', 'yearly');

// Dynamic Services
try {
    $services = $db->query("SELECT slug, updated_at FROM services WHERE is_active = 1 ORDER BY display_order ASC");
    foreach ($services as $service) {
        $serviceLastmod = $service['updated_at'] ? date('Y-m-d\TH:i:s+00:00', strtotime($service['updated_at'])) : $lastmod;
        outputUrl($baseUrl . '/services/' . htmlspecialchars($service['slug'], ENT_XML1, 'UTF-8'), '0.8', 'monthly', $serviceLastmod);
    }
} catch (Exception $e) {
    // Silently continue if services table doesn't exist or query fails
}

// Dynamic Blog Posts
try {
    $blogPosts = $db->query(
        "SELECT slug, published_at, updated_at 
         FROM posts_blog 
         WHERE status = 'published' AND (published_at IS NULL OR published_at <= NOW())
         ORDER BY published_at DESC, created_at DESC"
    );
    foreach ($blogPosts as $post) {
        $postLastmod = $post['updated_at'] ? date('Y-m-d\TH:i:s+00:00', strtotime($post['updated_at'])) : 
                      ($post['published_at'] ? date('Y-m-d\TH:i:s+00:00', strtotime($post['published_at'])) : $lastmod);
        outputUrl($baseUrl . '/blog/' . htmlspecialchars($post['slug'], ENT_XML1, 'UTF-8'), '0.7', 'weekly', $postLastmod);
    }
} catch (Exception $e) {
    // Silently continue if blog table doesn't exist or query fails
}

// Blog Categories
try {
    $blogCategories = $db->query("SELECT slug FROM post_categories ORDER BY name ASC");
    foreach ($blogCategories as $category) {
        outputUrl($baseUrl . '/blog/category/' . htmlspecialchars($category['slug'], ENT_XML1, 'UTF-8'), '0.6', 'weekly');
    }
} catch (Exception $e) {
    // Silently continue if categories table doesn't exist or query fails
}

// Dynamic Case Studies
try {
    $caseStudies = $db->query("SELECT slug, updated_at FROM case_studies ORDER BY created_at DESC");
    foreach ($caseStudies as $caseStudy) {
        $caseLastmod = $caseStudy['updated_at'] ? date('Y-m-d\TH:i:s+00:00', strtotime($caseStudy['updated_at'])) : $lastmod;
        outputUrl($baseUrl . '/case-studies/' . htmlspecialchars($caseStudy['slug'], ENT_XML1, 'UTF-8'), '0.7', 'monthly', $caseLastmod);
    }
} catch (Exception $e) {
    // Silently continue if case studies table doesn't exist or query fails
}

// Dynamic Pages (custom pages created in admin)
try {
    $customPages = $db->query(
        "SELECT slug, updated_at 
         FROM pages 
         WHERE is_published = 1 
         ORDER BY created_at DESC"
    );
    foreach ($customPages as $page) {
        $pageLastmod = $page['updated_at'] ? date('Y-m-d\TH:i:s+00:00', strtotime($page['updated_at'])) : $lastmod;
        outputUrl($baseUrl . '/page/' . htmlspecialchars($page['slug'], ENT_XML1, 'UTF-8'), '0.6', 'monthly', $pageLastmod);
    }
} catch (Exception $e) {
    // Silently continue if pages table doesn't exist or query fails
}

// Close XML
echo '</urlset>';

