<?php
/**
 * sitemap.php — ShortRest Dynamic Sitemap
 * Self-contained. Works with or without auto_prepend router.php.
 */

// Kill ALL output buffers (router.php opens them via auto_prepend_file)
while (ob_get_level() > 0) {
    ob_end_clean();
}

// Suppress all errors — never let them break XML
error_reporting(0);
ini_set('display_errors', 0);

// ── Get PDO connection ────────────────────────────────────────
// router.php may have already included db.php and set $pdo.
// If not, include it ourselves.
if (empty($pdo)) {
    $db_paths = [
        __DIR__ . '/php/db.php',
        __DIR__ . '/db.php',
    ];
    foreach ($db_paths as $_f) {
        if (file_exists($_f)) {
            ob_start();
            @include_once $_f;
            ob_end_clean();
            if (!empty($pdo)) break;
        }
    }
}

// ── Send XML header ───────────────────────────────────────────
header('Content-Type: application/xml; charset=UTF-8');

$today    = date('Y-m-d');
$base_url = 'https://shortrest.com.ng';

// ════════════════════════════════════════════════════════════
// HELPER FUNCTIONS
// ════════════════════════════════════════════════════════════

function sm($url, $mod, $freq, $pri) {
    echo '<url><loc>' . htmlspecialchars($url, ENT_XML1, 'UTF-8') . '</loc>'
       . '<lastmod>' . $mod . '</lastmod>'
       . '<changefreq>' . $freq . '</changefreq>'
       . '<priority>' . $pri . '</priority></url>' . "\n";
}

function sm_img($url, $mod, $freq, $pri, $img) {
    echo '<url><loc>' . htmlspecialchars($url, ENT_XML1, 'UTF-8') . '</loc>'
       . '<lastmod>' . $mod . '</lastmod>'
       . '<changefreq>' . $freq . '</changefreq>'
       . '<priority>' . $pri . '</priority>'
       . '<image:image><image:loc>' . htmlspecialchars($img, ENT_XML1, 'UTF-8') . '</image:loc></image:image>'
       . '</url>' . "\n";
}

function slug($text) {
    $s = strtolower(trim($text));
    if (function_exists('iconv')) {
        $converted = @iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $s);
        if ($converted !== false) $s = $converted;
    }
    return trim(preg_replace('/[^a-z0-9]+/', '-', $s), '-');
}

// ════════════════════════════════════════════════════════════
// STATE / LGA DATA
// ════════════════════════════════════════════════════════════
$states = [
    ['s'=>'Abia',        'sl'=>'abia',        'c'=>'Umuahia',      'l'=>['Aba North','Aba South','Arochukwu','Bende','Ikwuano','Isiala Ngwa North','Isiala Ngwa South','Isuikwuato','Obi Ngwa','Ohafia','Osisioma Ngwa','Ukwa East','Ukwa West','Umuahia North','Umuahia South','Umu Nneochi']],
    ['s'=>'Adamawa',     'sl'=>'adamawa',     'c'=>'Yola',         'l'=>['Demsa','Fufure','Ganye','Gayuk','Gombi','Grie','Hong','Jada','Lamurde','Madagali','Maiha','Mayo Belwa','Michika','Mubi North','Mubi South','Numan','Shelleng','Song','Toungo','Yola North','Yola South']],
    ['s'=>'Akwa Ibom',   'sl'=>'akwa-ibom',   'c'=>'Uyo',          'l'=>['Abak','Eastern Obolo','Eket','Esit Eket','Essien Udim','Etim Ekpo','Etinan','Ibeno','Ibesikpo Asutan','Ibiono-Ibom','Ika','Ikono','Ikot Abasi','Ikot Ekpene','Ini','Itu','Mbo','Mkpat-Enin','Nsit-Atai','Nsit-Ibom','Nsit-Ubium','Obot Akara','Okobo','Onna','Oron','Oruk Anam','Udung-Uko','Ukanafun','Uruan','Urue-Offong Oruko','Uyo']],
    ['s'=>'Anambra',     'sl'=>'anambra',     'c'=>'Awka',         'l'=>['Aguata','Anambra East','Anambra West','Anaocha','Awka North','Awka South','Ayamelum','Dunukofia','Ekwusigo','Idemili North','Idemili South','Ihiala','Njikoka','Nnewi North','Nnewi South','Ogbaru','Onitsha North','Onitsha South','Orumba North','Orumba South','Oyi']],
    ['s'=>'Bauchi',      'sl'=>'bauchi',      'c'=>'Bauchi',       'l'=>['Alkaleri','Bauchi','Bogoro','Damban','Darazo','Dass','Ganjuwa','Giade','Itas Gadau','Jamaare','Katagum','Kirfi','Misau','Ningi','Shira','Tafawa Balewa','Toro','Warji','Zaki']],
    ['s'=>'Bayelsa',     'sl'=>'bayelsa',     'c'=>'Yenagoa',      'l'=>['Brass','Ekeremor','Kolokuma Opokuma','Nembe','Ogbia','Sagbama','Southern Ijaw','Yenagoa']],
    ['s'=>'Benue',       'sl'=>'benue',       'c'=>'Makurdi',      'l'=>['Ado','Agatu','Apa','Buruku','Gboko','Guma','Gwer East','Gwer West','Katsina-Ala','Konshisha','Kwande','Logo','Makurdi','Obi','Ogbadibo','Ohimini','Oju','Okpokwu','Otukpo','Tarka','Ukum','Ushongo','Vandeikya']],
    ['s'=>'Borno',       'sl'=>'borno',       'c'=>'Maiduguri',    'l'=>['Abadam','Askira Uba','Bama','Bayo','Biu','Chibok','Damboa','Dikwa','Gubio','Guzamala','Gwoza','Hawul','Jere','Kaga','Kala Balge','Konduga','Kukawa','Kwaya Kusar','Mafa','Magumeri','Maiduguri','Marte','Mobbar','Monguno','Ngala','Nganzai','Shani']],
    ['s'=>'Cross River', 'sl'=>'cross-river', 'c'=>'Calabar',      'l'=>['Abi','Akamkpa','Akpabuyo','Bakassi','Bekwarra','Biase','Boki','Calabar Municipal','Calabar South','Etung','Ikom','Obanliku','Obubra','Obudu','Odukpani','Ogoja','Yakuur','Yala']],
    ['s'=>'Delta',       'sl'=>'delta',       'c'=>'Asaba',        'l'=>['Aniocha North','Aniocha South','Bomadi','Burutu','Ethiope East','Ethiope West','Ika North East','Ika South','Isoko North','Isoko South','Ndokwa East','Ndokwa West','Okpe','Oshimili North','Oshimili South','Patani','Sapele','Udu','Ughelli North','Ughelli South','Ukwuani','Uvwie','Warri North','Warri South','Warri South West']],
    ['s'=>'Ebonyi',      'sl'=>'ebonyi',      'c'=>'Abakaliki',    'l'=>['Abakaliki','Afikpo North','Afikpo South','Ebonyi','Ezza North','Ezza South','Ikwo','Ishielu','Ivo','Izzi','Ohaozara','Ohaukwu','Onicha']],
    ['s'=>'Edo',         'sl'=>'edo',         'c'=>'Benin City',   'l'=>['Akoko-Edo','Egor','Esan Central','Esan North-East','Esan South-East','Esan West','Etsako Central','Etsako East','Etsako West','Igueben','Ikpoba Okha','Orhionmwon','Oredo','Ovia North-East','Ovia South-West','Owan East','Owan West','Uhunmwonde']],
    ['s'=>'Ekiti',       'sl'=>'ekiti',       'c'=>'Ado Ekiti',    'l'=>['Ado Ekiti','Efon','Ekiti East','Ekiti South-West','Ekiti West','Emure','Gbonyin','Ido Osi','Ijero','Ikere','Ikole','Ilejemeje','Irepodun Ifelodun','Ise Orun','Moba','Oye']],
    ['s'=>'Enugu',       'sl'=>'enugu',       'c'=>'Enugu',        'l'=>['Aninri','Awgu','Enugu East','Enugu North','Enugu South','Ezeagu','Igbo Etiti','Igbo Eze North','Igbo Eze South','Isi Uzo','Nkanu East','Nkanu West','Nsukka','Oji River','Udenu','Udi','Uzo-Uwani']],
    ['s'=>'FCT',         'sl'=>'fct',         'c'=>'Abuja',        'l'=>['Abaji','Bwari','Gwagwalada','Kuje','Kwali','Municipal Area Council']],
    ['s'=>'Gombe',       'sl'=>'gombe',       'c'=>'Gombe',        'l'=>['Akko','Balanga','Billiri','Dukku','Funakaye','Gombe','Kaltungo','Kwami','Nafada','Shongom','Yamaltu Deba']],
    ['s'=>'Imo',         'sl'=>'imo',         'c'=>'Owerri',       'l'=>['Aboh Mbaise','Ahiazu Mbaise','Ehime Mbano','Ezinihitte Mbaise','Ideato North','Ideato South','Ihitte Uboma','Ikeduru','Isiala Mbano','Isu','Mbaitoli','Ngor Okpala','Njaba','Nkwerre','Nwangele','Obowo','Oguta','Ohaji Egbema','Okigwe','Orlu','Orsu','Oru East','Oru West','Owerri Municipal','Owerri North','Owerri West','Unuimo']],
    ['s'=>'Jigawa',      'sl'=>'jigawa',      'c'=>'Dutse',        'l'=>['Auyo','Babura','Biriniwa','Birnin Kudu','Buji','Dutse','Gagarawa','Garki','Gumel','Guri','Gwaram','Gwiwa','Hadejia','Jahun','Kafin Hausa','Kaugama','Kazaure','Kiri Kasama','Kiyawa','Koko Besse','Maigatari','Malam Madori','Miga','Ringim','Roni','Sule Tankarkar','Taura','Yankwashi']],
    ['s'=>'Kaduna',      'sl'=>'kaduna',      'c'=>'Kaduna',       'l'=>['Birnin Gwari','Chikun','Giwa','Igabi','Ikara','Jaba','Jemaa','Kachia','Kaduna North','Kaduna South','Kagarko','Kajuru','Kaura','Kauru','Kubau','Kudan','Lere','Makarfi','Sabon Gari','Sanga','Soba','Zangon Kataf','Zaria']],
    ['s'=>'Kano',        'sl'=>'kano',        'c'=>'Kano',         'l'=>['Ajingi','Albasu','Bagwai','Bebeji','Bichi','Bunkure','Dala','Dambatta','Dawakin Kudu','Dawakin Tofa','Doguwa','Fagge','Gabasawa','Garko','Garun Mallam','Gaya','Gezawa','Gwale','Gwarzo','Kabo','Kano Municipal','Karaye','Kibiya','Kiru','Kumbotso','Kunchi','Kura','Madobi','Makoda','Minjibir','Nasarawa','Rano','Rimin Gado','Rogo','Shanono','Sumaila','Takai','Tarauni','Tofa','Tsanyawa','Tudun Wada','Ungogo','Warawa','Wudil']],
    ['s'=>'Katsina',     'sl'=>'katsina',     'c'=>'Katsina',      'l'=>['Bakori','Batagarawa','Batsari','Baure','Bindawa','Charanchi','Dandume','Danja','Dan Musa','Daura','Dutsi','Dutsin Ma','Faskari','Funtua','Ingawa','Jibia','Kafur','Kaita','Kankara','Kankia','Katsina','Kurfi','Kusada','Mai Adua','Malumfashi','Mani','Mashi','Matazu','Musawa','Rimi','Sabuwa','Safana','Sandamu','Zango']],
    ['s'=>'Kebbi',       'sl'=>'kebbi',       'c'=>'Birnin Kebbi', 'l'=>['Aleiro','Arewa Dandi','Argungu','Augie','Bagudo','Birnin Kebbi','Bunza','Dandi','Fakai','Gwandu','Jega','Kalgo','Koko Besse','Maiyama','Ngaski','Sakaba','Shanga','Suru','Wasagu Danko','Yauri','Zuru']],
    ['s'=>'Kogi',        'sl'=>'kogi',        'c'=>'Lokoja',       'l'=>['Adavi','Ajaokuta','Ankpa','Bassa','Dekina','Ibaji','Idah','Igalamela Odolu','Ijumu','Kabba Bunu','Kogi','Lokoja','Mopa-Muro','Ofu','Ogori Magongo','Okehi','Okene','Olamaboro','Omala','Yagba East','Yagba West']],
    ['s'=>'Kwara',       'sl'=>'kwara',       'c'=>'Ilorin',       'l'=>['Asa','Baruten','Edu','Ekiti','Ifelodun','Ilorin East','Ilorin South','Ilorin West','Isin','Kaiama','Moro','Offa','Oke Ero','Oyun','Pategi']],
    ['s'=>'Lagos',       'sl'=>'lagos',       'c'=>'Ikeja',        'l'=>['Agege','Ajeromi-Ifelodun','Alimosho','Amuwo-Odofin','Apapa','Badagry','Epe','Eti-Osa','Ibeju-Lekki','Ifako-Ijaiye','Ikeja','Ikorodu','Kosofe','Lagos Island','Lagos Mainland','Mushin','Ojo','Oshodi-Isolo','Shomolu','Surulere']],
    ['s'=>'Nasarawa',    'sl'=>'nasarawa',    'c'=>'Lafia',        'l'=>['Akwanga','Awe','Doma','Karum','Keffi','Kokona','Lafia','Nasarawa','Nasarawa Egon','Obi','Toto','Wamba']],
    ['s'=>'Niger',       'sl'=>'niger',       'c'=>'Minna',        'l'=>['Agaie','Agwara','Bida','Borgu','Bosso','Chanchaga','Edati','Gbako','Gurara','Katcha','Kontagora','Lapai','Lavun','Magama','Mariga','Mashegu','Mokwa','Muya','Pailoro','Rafi','Rijau','Shiroro','Suleja','Tafa','Wushishi']],
    ['s'=>'Ogun',        'sl'=>'ogun',        'c'=>'Abeokuta',     'l'=>['Abeokuta North','Abeokuta South','Ado-Odo Ota','Egbado North','Egbado South','Ewekoro','Ifo','Ijebu East','Ijebu North','Ijebu North East','Ijebu Ode','Ikenne','Imeko Afon','Ipokia','Obafemi Owode','Odeda','Odogbolu','Ogun Waterside','Remo North','Sagamu']],
    ['s'=>'Ondo',        'sl'=>'ondo',        'c'=>'Akure',        'l'=>['Akoko North-East','Akoko North-West','Akoko South-East','Akoko South-West','Akure North','Akure South','Ese Odo','Idanre','Ifedore','Ilaje','Ile Oluji Okeigbo','Irele','Odigbo','Okitipupa','Ondo East','Ondo West','Ose','Owo']],
    ['s'=>'Osun',        'sl'=>'osun',        'c'=>'Osogbo',       'l'=>['Aiyedaade','Aiyedire','Atakunmosa East','Atakunmosa West','Boluwaduro','Boripe','Ede North','Ede South','Egbedore','Ejigbo','Ife Central','Ife East','Ife North','Ife South','Ifelodun','Ila','Ilesa East','Ilesa West','Irepodun','Irewole','Isokan','Iwo','Obokun','Odo Otin','Ola Oluwa','Olorunda','Oriade','Orolu','Osogbo']],
    ['s'=>'Oyo',         'sl'=>'oyo',         'c'=>'Ibadan',       'l'=>['Akinyele','Atiba','Atisbo','Egbeda','Ibadan North','Ibadan North-East','Ibadan North-West','Ibadan South-East','Ibadan South-West','Ibarapa Central','Ibarapa East','Ibarapa North','Ido','Irepo','Iseyin','Itesiwaju','Iwajowa','Kajola','Lagelu','Ogbomosho North','Ogbomosho South','Ogo Oluwa','Olorunsogo','Oluyole','Ona Ara','Orelope','Ori Ire','Oyo West','Oyo East','Saki East','Saki West','Surulere']],
    ['s'=>'Plateau',     'sl'=>'plateau',     'c'=>'Jos',          'l'=>['Barkin Ladi','Bassa','Bokkos','Jos East','Jos North','Jos South','Kanam','Kanke','Langtang North','Langtang South','Mangu','Mikang','Pankshin','Quan Pan','Riyom','Shendam','Wase']],
    ['s'=>'Rivers',      'sl'=>'rivers',      'c'=>'Port Harcourt','l'=>['Abua Odual','Ahoada East','Ahoada West','Akuku-Toru','Andoni','Asari-Toru','Bonny','Degema','Eleme','Emuoha','Etche','Gokana','Ikwerre','Khana','Obio Akpor','Ogba Egbema Ndoni','Ogu Bolo','Okrika','Omuma','Opobo Nkoro','Oyigbo','Port Harcourt','Tai']],
    ['s'=>'Sokoto',      'sl'=>'sokoto',      'c'=>'Sokoto',       'l'=>['Bodinga','Dange Shuni','Goronyo','Gada','Illela','Gudu','Kebbe','Kware','Rabah','Sabon Birni','Shagari','Silame','Sokoto North','Sokoto South','Tambuwal','Tangaza','Tureta','Wamako','Wurno','Yabo']],
    ['s'=>'Taraba',      'sl'=>'taraba',      'c'=>'Jalingo',      'l'=>['Ardo Kola','Bali','Donga','Gashaka','Gassol','Ibi','Jalingo','Karim Lamido','Kiyawa','Kurmi','Lau','Sardauna','Takum','Ussa','Wukari','Yorro','Zing']],
    ['s'=>'Yobe',        'sl'=>'yobe',        'c'=>'Damaturu',     'l'=>['Bade','Bursari','Damaturu','Fika','Fune','Geidam','Gogaram','Gujba','Gulani','Jakusko','Karasuwa','Machina','Nangere','Nguru','Potiskum','Tarmuwa','Yunusari','Yusufari']],
    ['s'=>'Zamfara',     'sl'=>'zamfara',     'c'=>'Gusau',        'l'=>['Anka','Bakura','Birnin Magaji Kiyaw','Bungudu','Gummi','Gusau','Kaura Namoda','Maradun','Shinkafi','Talata Mafara','Tsafe','Zurmi']],
];

// ════════════════════════════════════════════════════════════
// BEGIN XML — CRITICAL: no whitespace or output before this line
// ════════════════════════════════════════════════════════════
echo '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">' . "\n";

// ── Static pages ──────────────────────────────────────────────
sm($base_url . '/',                $today, 'daily',   '1.0');
sm($base_url . '/search',          $today, 'daily',   '0.9');
sm($base_url . '/rooms',           $today, 'daily',   '0.9');
sm($base_url . '/hotels',          $today, 'daily',   '0.9');
sm($base_url . '/shortlets',       $today, 'daily',   '0.9');
sm($base_url . '/blog',            $today, 'weekly',  '0.8');
sm($base_url . '/about',           $today, 'monthly', '0.7');
sm($base_url . '/contact',         $today, 'monthly', '0.7');
sm($base_url . '/services',        $today, 'monthly', '0.7');
sm($base_url . '/safety-tips',     $today, 'monthly', '0.7');
sm($base_url . '/faq',             $today, 'monthly', '0.6');
sm($base_url . '/privacy',         $today, 'monthly', '0.5');
sm($base_url . '/terms',           $today, 'monthly', '0.5');
sm($base_url . '/disclaimer',      $today, 'monthly', '0.5');
sm($base_url . '/code-of-conduct', $today, 'monthly', '0.5');

// ── Geographic pages ──────────────────────────────────────────
foreach ($states as $st) {
    $ss = $st['sl'];
    $cs = slug($st['c']);

    sm($base_url . '/accommodation/' . $ss, $today, 'daily', '0.9');
    sm($base_url . '/hotels/'        . $ss, $today, 'daily', '0.9');
    sm($base_url . '/shortlets/'     . $ss, $today, 'daily', '0.9');

    if ($cs !== $ss) {
        sm($base_url . '/accommodation/' . $ss . '/' . $cs, $today, 'daily', '0.8');
        sm($base_url . '/hotels/'        . $ss . '/' . $cs, $today, 'daily', '0.8');
        sm($base_url . '/shortlets/'     . $ss . '/' . $cs, $today, 'daily', '0.8');
    }

    foreach ($st['l'] as $lga) {
        $ls = slug($lga);
        if (empty($ls) || $ls === $ss || $ls === $cs) continue;
        sm($base_url . '/accommodation/' . $ss . '/' . $ls, $today, 'weekly', '0.7');
        sm($base_url . '/hotels/'        . $ss . '/' . $ls, $today, 'weekly', '0.7');
        sm($base_url . '/shortlets/'     . $ss . '/' . $ls, $today, 'weekly', '0.7');
    }
}

// ── Dynamic DB listings ───────────────────────────────────────
if (!empty($pdo)) {
    try {
        // Hotels
        $stmt = $pdo->query("SELECT slug, cover_image, DATE(updated_at) AS mod FROM hotels WHERE status='active' AND deleted_at IS NULL AND slug IS NOT NULL AND slug!='' ORDER BY updated_at DESC LIMIT 5000");
        while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
            $url = $base_url . '/hotel/' . $row['slug'];
            $mod = $row['mod'] ?: $today;
            $img = !empty($row['cover_image']) ? $base_url . '/' . ltrim($row['cover_image'], '/') : '';
            $img ? sm_img($url, $mod, 'weekly', '0.9', $img) : sm($url, $mod, 'weekly', '0.9');
        }

        // Rooms
        $stmt = $pdo->query("SELECT hr.slug AS rs, h.slug AS hs, DATE(hr.updated_at) AS mod FROM hotel_rooms hr JOIN hotels h ON h.id=hr.hotel_id WHERE hr.status='available' AND hr.deleted_at IS NULL AND h.status='active' AND h.deleted_at IS NULL AND hr.slug IS NOT NULL AND hr.slug!='' LIMIT 5000");
        while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
            sm($base_url . '/hotel/' . $row['hs'] . '/room/' . $row['rs'], $row['mod'] ?: $today, 'daily', '0.8');
        }

        // Shortlets
        $stmt = $pdo->query("SELECT slug, cover_image, DATE(updated_at) AS mod FROM shortlets WHERE status='active' AND deleted_at IS NULL AND slug IS NOT NULL AND slug!='' ORDER BY updated_at DESC LIMIT 5000");
        while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
            $url = $base_url . '/shortlet/' . $row['slug'];
            $mod = $row['mod'] ?: $today;
            $img = !empty($row['cover_image']) ? $base_url . '/' . ltrim($row['cover_image'], '/') : '';
            $img ? sm_img($url, $mod, 'daily', '0.9', $img) : sm($url, $mod, 'daily', '0.9');
        }

    } catch (Exception $e) {
        // Silent — never break XML
    }
}

echo '</urlset>';