<?php
// BOHO GLOW - Sitemap automat pentru Google
header('Content-Type: application/xml; charset=UTF-8');

$site = 'https://bohoglow.shop';
$dataFile = __DIR__ . '/date-private/produse.json';

function xmlEscape($value) {
    return htmlspecialchars(
        (string)$value,
        ENT_XML1 | ENT_QUOTES | ENT_SUBSTITUTE,
        'UTF-8'
    );
}

function slugifySitemap($name) {
    $name = mb_strtolower(trim((string)$name), 'UTF-8');

    $name = strtr($name, [
        'ă'=>'a', 'â'=>'a', 'î'=>'i',
        'ș'=>'s', 'ş'=>'s', 'ț'=>'t', 'ţ'=>'t'
    ]);

    if (function_exists('iconv')) {
        $translit = @iconv(
            'UTF-8',
            'ASCII//TRANSLIT//IGNORE',
            $name
        );
        if ($translit !== false) $name = $translit;
    }

    $name = trim(
        (string)preg_replace('/[^a-z0-9]+/i', '-', $name),
        '-'
    );

    return $name !== '' ? strtolower($name) : 'produs';
}

// Citim produsele introduse prin Admin.
$products = [];

if (is_readable($dataFile)) {
    $read = json_decode(
        (string)file_get_contents($dataFile),
        true
    );
    if (is_array($read)) $products = $read;
}

// Produsele originale ale colecției.
$existing = [
    ['lumanare-acadea.jpg','Dulceața Crăciunului'],
    ['lumanare-cadou.jpg','Surpriza Elfilor'],
    ['lumanare-mos.jpg','Moșul Fermecat'],
    ['trenulet-craciun.jpg','Trenulețul Magic'],
    ['glob-mos-craciun-semineu.png','Poveste la Șemineu'],
    ['glob-floral-craciun.png','Eleganța Iernii'],
    ['glob-satul-de-iarna.png','Satul de Poveste'],
    ['casuta-fermecata.jpg','Căsuța Fermecată'],
    ['mos-craciun-alb.jpg','Moș Crăciun de Poveste'],
    ['bradut-de-craciun.jpg','Brăduțul Fermecat'],
    ['bufnita-iernii.jpg','Bufnița Iernii'],
    ['casuta-fermecata-alba.png','Căsuța din Tărâmul Elfilor']
];

// Păstrăm aceleași ID-uri ca în produs.php.
$known = [];

foreach ($products as $p) {
    if (is_array($p)) {
        $known[(string)($p['id'] ?? '')] = true;
    }
}

foreach ($existing as $item) {
    $id = 'legacy-' . substr(sha1($item[0]), 0, 20);

    if (!isset($known[$id])) {
        $products[] = [
            'id' => $id,
            'name' => $item[1],
            'image' => $item[0]
        ];
    }
}

// Excludem produsele ascunse sau incomplete.
$byId = [];

foreach ($products as $p) {
    if (
        !is_array($p) ||
        !empty($p['hidden']) ||
        empty($p['id']) ||
        empty($p['name'])
    ) {
        continue;
    }

    $byId[(string)$p['id']] = $p;
}

// Aceeași ordine și aceleași slug-uri ca în produs.php.
ksort($byId, SORT_STRING);

$slugById = [];
$idBySlug = [];

foreach ($byId as $id => $p) {
    $base = slugifySitemap($p['name']);
    $slug = $base;

    if (isset($idBySlug[$slug])) {
        $slug = $base . '-' . substr(sha1($id), 0, 8);
    }

    $candidate = $slug;
    $i = 2;

    while (isset($idBySlug[$candidate])) {
        $candidate = $slug . '-' . $i++;
    }

    $slugById[$id] = $candidate;
    $idBySlug[$candidate] = $id;
}

// Validăm căile fotografiilor.
$legacyImages = array_column($existing, 0);

function validImageSitemap($image, $legacyImages) {
    return (
        preg_match(
            '~^imagini-produse/[a-f0-9]{24}\.(jpg|png|webp)$~',
            $image
        ) ||
        in_array($image, $legacyImages, true)
    );
}

echo '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
?>
<urlset
 xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
 xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">

  <url>
    <loc><?=xmlEscape($site . '/')?></loc>
  </url>

  <url>
    <loc><?=xmlEscape($site . '/colectia-craciun.php')?></loc>
  </url>

<?php foreach ($byId as $id => $p): ?>
<?php
    $url = $site . '/produs/' . rawurlencode($slugById[$id]);
    $image = (string)($p['image'] ?? '');
?>
  <url>
    <loc><?=xmlEscape($url)?></loc>
<?php if ($image !== '' && validImageSitemap($image, $legacyImages)): ?>
    <image:image>
      <image:loc><?=xmlEscape($site . '/' . $image)?></image:loc>
    </image:image>
<?php endif; ?>
  </url>
<?php endforeach; ?>

</urlset>
