<?php
declare(strict_types=1);

/**
 * generate-sitemap.php
 * Gera um sitemap.xml físico a partir dos produtos do site.
 *
 * Coloque este script em uma rota protegida (ex: /cron/generate-sitemap.php) ou execute via CLI.
 * O sitemap será salvo como "sitemap.xml" na raiz do site.
 */

require_once __DIR__ . '/../config.php';
require_once __DIR__ . '/../includes/Database.php';
require_once __DIR__ . '/../includes/Product.php';

// URL base do site
$siteUrl = rtrim((defined('SITE_URL') ? SITE_URL : 'https://' . ($_SERVER['HTTP_HOST'] ?? 'localhost')), '/');

try {
    $productModel = new Product();
    $products = $productModel->getAll();
    if (!is_array($products)) {
        $products = (array)$products;
    }
} catch (Throwable $e) {
    error_log('Erro ao gerar sitemap: ' . $e->getMessage());
    exit("Erro ao gerar sitemap: " . $e->getMessage());
}

// DOMDocument para gerar XML
$dom = new DOMDocument('1.0', 'UTF-8');
$dom->formatOutput = true;

$urlset = $dom->createElement('urlset');
$urlset->setAttribute('xmlns', 'http://www.sitemaps.org/schemas/sitemap/0.9');
$dom->appendChild($urlset);

// Helper para criar nó <url>
$createUrlNode = function(string $loc, ?string $lastmod = null, string $changefreq = 'weekly', string $priority = '0.5') use ($dom, $urlset) {
    $url = $dom->createElement('url');

    $locNode = $dom->createElement('loc');
    $locNode->appendChild($dom->createTextNode($loc));
    $url->appendChild($locNode);

    if ($lastmod) {
        $lm = $dom->createElement('lastmod');
        $lm->appendChild($dom->createTextNode($lastmod));
        $url->appendChild($lm);
    }

    $cf = $dom->createElement('changefreq', $changefreq);
    $url->appendChild($cf);

    $pr = $dom->createElement('priority', $priority);
    $url->appendChild($pr);

    $urlset->appendChild($url);
};

// Home
$createUrlNode($siteUrl . '/', date('Y-m-d'), 'daily', '1.0');

// Produtos
foreach ($products as $p) {
    $prod = is_array($p) ? $p : (array)$p;

    $slug = $prod['slug'] ?? null;
    if (!$slug) continue;

    $loc = $siteUrl . '/product.php?slug=' . rawurlencode((string)$slug);

    $lastmodRaw = $prod['updated_at'] ?? $prod['created_at'] ?? null;
    $lastmod = null;
    if (!empty($lastmodRaw)) {
        $ts = strtotime((string)$lastmodRaw);
        if ($ts !== false) $lastmod = date('Y-m-d', $ts);
    }

    $createUrlNode($loc, $lastmod, 'weekly', '0.8');
}

// Salvar sitemap.xml na raiz do site
$sitemapFile = __DIR__ . '/../sitemap.xml';
if (@$dom->save($sitemapFile)) {
    echo "Sitemap gerado com sucesso em $sitemapFile\n";
} else {
    echo "Erro ao salvar sitemap.xml\n";
}
