<?php
header('Content-Type: application/xml; charset=utf-8');
echo '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
?>
<?xml-stylesheet type="text/xsl" href="sitemap-stylesheet.xsl"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
        xmlns:xhtml="http://www.w3.org/1999/xhtml"
        xmlns:image="http://www.google.com/schemas/sitemap-image/1.1"
        xmlns:video="http://www.google.com/schemas/sitemap-video/1.1">
<?php
require_once __DIR__ . '/includes/db.php';
require_once __DIR__ . '/includes/config.php';
require_once __DIR__ . '/includes/functions.php';
require_once __DIR__ . '/includes/seo.php';

$site_url = rtrim(SITE_URL, '/');
$services_list = get_services_list();
$cities = get_cities();

function addUrl($loc, $priority = 0.8, $changefreq = 'weekly', $lastmod = null, $images = []) {
    echo '    <url>' . "\n";
    echo '        <loc>' . htmlspecialchars($loc) . '</loc>' . "\n";
    if ($lastmod) {
        echo '        <lastmod>' . date('Y-m-d', strtotime($lastmod)) . '</lastmod>' . "\n";
    }
    echo '        <changefreq>' . $changefreq . '</changefreq>' . "\n";
    echo '        <priority>' . $priority . '</priority>' . "\n";
    foreach ($images as $img) {
        echo '        <image:image><image:loc>' . htmlspecialchars($img) . '</image:loc></image:image>' . "\n";
    }
    echo '    </url>' . "\n";
}

// Static pages
addUrl($site_url . '/', 1.0, 'daily');
addUrl($site_url . '/services.php', 0.9, 'weekly');
addUrl($site_url . '/portfolio.php', 0.9, 'weekly');
addUrl($site_url . '/projects.php', 0.9, 'weekly');
addUrl($site_url . '/blog.php', 0.8, 'weekly');
addUrl($site_url . '/team.php', 0.7, 'monthly');
addUrl($site_url . '/careers.php', 0.7, 'weekly');
addUrl($site_url . '/contact.php', 0.8, 'monthly');
addUrl($site_url . '/partners.php', 0.6, 'monthly');
addUrl($site_url . '/sitemap.xml', 0.3, 'monthly');

// Service pages
$services = $db->select("SELECT slug, updated_at, created_at, image FROM services WHERE is_active = 1 AND (parent_id IS NULL OR parent_id = 0)");
foreach ($services as $s) {
    $lastmod = $s['updated_at'] ?: $s['created_at'];
    $images = $s['image'] ? [$site_url . '/uploads/services/' . $s['image']] : [];
    addUrl($site_url . '/service/' . $s['slug'], 0.8, 'weekly', $lastmod, $images);
}

// Sub-services
$sub_services = $db->select("SELECT slug, updated_at, created_at FROM services WHERE is_active = 1 AND parent_id IS NOT NULL AND parent_id > 0");
foreach ($sub_services as $s) {
    $lastmod = $s['updated_at'] ?: $s['created_at'];
    addUrl($site_url . '/service/' . $s['slug'], 0.7, 'weekly', $lastmod);
}

// Location service pages
foreach ($cities as $city_slug => $city_name) {
    foreach ($services_list as $svc_slug => $svc_data) {
        addUrl($site_url . '/location/' . $city_slug . '/' . $svc_slug, 0.6, 'monthly');
    }
}

// Projects
$projects = $db->select("SELECT slug, updated_at, created_at FROM projects WHERE is_active = 1");
foreach ($projects as $p) {
    $lastmod = $p['updated_at'] ?: $p['created_at'];
    addUrl($site_url . '/project/' . $p['slug'], 0.7, 'weekly', $lastmod);
}

// Blog posts
$posts = $db->select("SELECT slug, updated_at, created_at FROM blog_posts WHERE is_active = 1");
foreach ($posts as $p) {
    $lastmod = $p['updated_at'] ?: $p['created_at'];
    addUrl($site_url . '/blog/' . $p['slug'], 0.7, 'weekly', $lastmod);
}

// Blog categories
$categories = $db->select("SELECT slug FROM blog_categories WHERE is_active = 1");
foreach ($categories as $c) {
    addUrl($site_url . '/blog/category/' . $c['slug'], 0.6, 'weekly');
}

// Custom pages
$pages = $db->select("SELECT slug, updated_at, created_at FROM pages WHERE is_active = 1");
foreach ($pages as $p) {
    $lastmod = $p['updated_at'] ?: $p['created_at'];
    addUrl($site_url . '/page/' . $p['slug'], 0.6, 'monthly', $lastmod);
}

// Jobs
$jobs = $db->select("SELECT slug, updated_at, created_at FROM careers WHERE is_active = 1");
foreach ($jobs as $j) {
    $lastmod = $j['updated_at'] ?: $j['created_at'];
    addUrl($site_url . '/career/' . $j['slug'], 0.7, 'weekly', $lastmod);
}

// Partners
$partners = $db->select("SELECT slug, updated_at, created_at FROM partners WHERE is_active = 1");
foreach ($partners as $p) {
    $lastmod = $p['updated_at'] ?: $p['created_at'];
    addUrl($site_url . '/partner/' . $p['slug'], 0.6, 'monthly', $lastmod);
}
?>
</urlset>
