<?php
require_once __DIR__ . '/core/main.php';
require_once __DIR__ . '/classes/router.php';
ini_set('display_errors', 1);
error_reporting(E_ALL);
header('Content-Type: application/xml');
try {
	router::start();
	require_once __DIR__ . '/' . router::getType() . '/classes/website.php';
	website::get(router::getList());
	website::setContent();
	
	$domtree = new DOMDocument('1.0', 'UTF-8');

	$urlset = $domtree->createElement("urlset");
	$xmlns = $domtree->createAttribute('xmlns');
	$xmlns->value = 'http://www.sitemaps.org/schemas/sitemap/0.9';
	$urlset->appendChild($xmlns);
	$urlset = $domtree->appendChild($urlset);

	$categorias = website::getCatalog()->getCategories(website::getRootCategory());
	foreach($categorias as $category) {
		$url = $domtree->createElement('url');
		$url = $urlset->appendChild($url);
		$url->appendChild($domtree->createElement('loc', $_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['HTTP_HOST'] . '/' . $category->address));

		$produtosRaw = db::fetchAll(
			"SELECT 
				salesitem.id,
				salesitem.baseitem,
				catalog.title,
				salesitemcategory.category,
				catalog.id as catalog,
				salesitemcategory.salesitem,
				salesitem.title,
				salesitem.detailedtitle,
				salesitem.description,
				image.address as image,
				min(case when salesitempricetable.type = 'NORMAL' then salesitempricetable.price else null end) as normal_price,
				min(case when salesitempricetable.type = 'SALE' then salesitempricetable.price else null end) as sale_price,
				min(salesitempricetable.price) as price
			FROM 
				salesitemcategory salesitemcategory
				left join salesitem salesitem on salesitemcategory.salesitem = salesitem.id
				left join category category on salesitemcategory.category = category.id
				left join catalog catalog on $1 = catalog.id
				left join pricetable pricetable on catalog.pricetable = pricetable.id
				left join salesitempricetable salesitempricetable on salesitem.id = salesitempricetable.salesitem
					and pricetable.id = salesitempricetable.pricetable
				left join image image on salesitem.defaultpicture = image.id
			where
				salesitemcategory.category =  $2
				and current_timestamp between coalesce(salesitempricetable.startdate, CURRENT_TIMESTAMP) and coalesce(salesitempricetable.enddate, CURRENT_TIMESTAMP) 
			group by
				salesitem.id,
				catalog.title,
				salesitemcategory.category,
				catalog.id,
				salesitemcategory.salesitem,
				salesitem.title,
				salesitem.detailedtitle,
				salesitem.description,
				image.address
			having min(salesitempricetable.price) > 0
			order by
				salesitem.detailedtitle asc",
			array(website::getCatalog()->id, $category->id)
		);
		$produtos = array();
		if(!empty($produtosRaw)) {
			foreach($produtosRaw as $row) {
				if(empty($row['baseitem'])) {
					$produtos[$row['id']] = array(
						'id' => $row['id'],
						'title' => $row['title'],
						'category' => $row['category'],
						'catalog' => $row['catalog'],
						'salesitem' => $row['salesitem'],
						'title' => $row['title'],
						'description' => $row['description'],
						'image' => $row['image'],
						'normal_price' => $row['normal_price'],
						'sale_price' => $row['sale_price'],
						'price' => $row['price'],
					);
				}
			}
			foreach($produtosRaw as $row) {
				if(!empty($row['baseitem'])) {
					if(array_key_exists($row['baseitem'], $produtos)) {
						//sv::preExp('Item: ' . $row['baseitem'] . '(' . $row['id'] . '): deveria ter sale_price = "' . $row['sale_price'] . '" e normal_price = "' . $row['normal_price'] . '".');
						if(!empty($row['normal_price']) AND ($row['normal_price'] < $produtos[$row['baseitem']]['normal_price'] OR empty($produtos[$row['baseitem']]['normal_price']))) {
							$produtos[$row['baseitem']]['normal_price'] = $row['normal_price'];
						}
						if(!empty($row['sale_price']) AND ($row['sale_price'] < $produtos[$row['baseitem']]['sale_price'] OR empty($produtos[$row['baseitem']]['sale_price']))) {
							$produtos[$row['baseitem']]['sale_price'] = $row['sale_price'];
						}
					} else {
						$produtos[$row['baseitem']] = array(
							'id' => $row['id'],
							'title' => $row['title'],
							'category' => $row['category'],
							'catalog' => $row['catalog'],
							'salesitem' => $row['salesitem'],
							'title' => $row['title'],
							'description' => $row['description'],
							'image' => $row['image'],
							'normal_price' => $row['normal_price'],
							'sale_price' => $row['sale_price'],
							'price' => $row['price'],
						);
					}
				}
			}
		}
		foreach($produtos as $row) {
			$url = $domtree->createElement('url');
			$url = $urlset->appendChild($url);
			$url->appendChild($domtree->createElement('loc', $_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['HTTP_HOST'] . '/' . $category->address . '/produto/' . website::normalize($row['title']) . '/' . $row['id']));
		}
		

	}

	echo $domtree->saveXML();	
} catch(Exception $e) {
	echo '<h1>Não foi possível finalizar a requisição</h1>';
	echo '<pre>Mensagem de erro:</pre>';
	echo '<pre>' . $e->getMessage() . '</pre>';
	exit;
}
?>