<?php
/**
 * Динамический sitemap.
 *
 * Объединяет:
 *   1. Маршруты, известные на момент сборки (public/sitemap-routes.json,
 *      генерируется scripts/generate-sitemap.mjs при `npm run build`).
 *   2. Статьи из таблицы `contents` (State = 1), которые заливаются ботом
 *      через articleflow.php уже после сборки.
 *
 * Ссылка на этот файл указана в robots.txt. Статический public/sitemap.xml
 * остаётся как fallback на случай недоступности PHP.
 */

header('Content-Type: application/xml; charset=utf-8');

$SITE_URL = 'https://czasnarelakswro.pl';

// Префикс URL для статей по SectionID из таблицы contents.
// По умолчанию всё, что не перечислено, попадает под '/blog/'.
$SECTION_URL_PREFIX = [
    // '2' => '/ru/blog/',
];
$DEFAULT_SECTION_PREFIX = '/blog/';

$urls = []; // loc => lastmod|null

// 1. Маршруты из манифеста сборки
$routesFile = __DIR__ . '/sitemap-routes.json';
if (is_file($routesFile)) {
    $routes = json_decode(file_get_contents($routesFile), true);
    if (is_array($routes)) {
        foreach ($routes as $path) {
            $urls[$SITE_URL . '/' . ltrim($path, '/')] = null;
        }
    }
}
if (!$urls) {
    // Манифест не задеплоился — не отдаём пустой sitemap
    $urls[$SITE_URL . '/'] = null;
}

// 2. Статьи из базы (добавленные после сборки)
include __DIR__ . '/apiconf.php';
try {
    $pdo = new PDO(
        "mysql:host={$DB_HOST};port={$DB_PORT};dbname={$DB_NAME};charset=utf8",
        $DB_USER,
        $DB_PASS,
        [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_TIMEOUT => 5]
    );
    $stmt = $pdo->query("SELECT Name, DateTime, SectionID FROM contents WHERE State = 1");
    foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) {
        $slug = trim((string)($row['Name'] ?? ''));
        if ($slug === '' || preg_match('~[^a-z0-9\-]~', $slug)) continue;
        $prefix = $SECTION_URL_PREFIX[(string)($row['SectionID'] ?? '')] ?? $DEFAULT_SECTION_PREFIX;
        $loc = $SITE_URL . $prefix . $slug . '/';
        $lastmod = null;
        if (!empty($row['DateTime'])) {
            $ts = strtotime($row['DateTime']);
            if ($ts) $lastmod = date('Y-m-d', $ts);
        }
        if (!isset($urls[$loc]) || $lastmod) {
            $urls[$loc] = $lastmod;
        }
    }
} catch (Throwable $e) {
    // БД недоступна — отдаём только статические маршруты
}

echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
echo "<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n";
foreach ($urls as $loc => $lastmod) {
    echo "  <url>\n";
    echo "    <loc>" . htmlspecialchars($loc, ENT_XML1) . "</loc>\n";
    if ($lastmod) {
        echo "    <lastmod>{$lastmod}</lastmod>\n";
    }
    echo "  </url>\n";
}
echo "</urlset>\n";
