<?php
/* --------------------------------------------------------------
   UrlProvider.inc.php 2017-12-01
   Gambio GmbH
   http://www.gambio.de
   Copyright (c) 2017 Gambio GmbH
   Released under the GNU General Public License (Version 2)
   [http://www.gnu.org/licenses/gpl-2.0.html]
   --------------------------------------------------------------
*/

/**
 * Class UrlProvider
 */
class UrlProvider
{
	/**
	 * @var \GMSEOBoost
	 */
	protected $seoBoost;
	
	/**
	 * @var \LanguageProviderInterface
	 */
	protected $languageProvider;
	
	/**
	 * @var array
	 */
	protected $languageIds = [];
	
	
	/**
	 * UrlProvider constructor.
	 *
	 * @param \GMSEOBoost                $seoBoost
	 * @param \LanguageProviderInterface $languageProvider
	 */
	public function __construct(\GMSEOBoost $seoBoost, \LanguageProviderInterface $languageProvider)
	{
		$this->seoBoost         = $seoBoost;
		$this->languageProvider = $languageProvider;
	}
	
	
	/**
	 * Returns the url of a product identified by its ID and language code.
	 * 
	 * @param \IdType       $productId
	 * @param \LanguageCode $languageCode
	 *
	 * @return string Product Url
	 */
	public function getProductUrl(\IdType $productId, \LanguageCode $languageCode)
	{
		$name       = '';
		$languageId = $this->getLanguageIdByCode($languageCode);
		
		$query  = 'SELECT `products_name`
					FROM `products_description`
					WHERE
						`products_id` = ' . $productId->asInt() . ' AND 
						`language_id` = ' . $languageId;
		$result = xtc_db_query($query);
		
		if(xtc_db_num_rows($result))
		{
			$row  = xtc_db_fetch_array($result);
			$name = $row['products_name'];
		}
		
		if($this->seoBoost->boost_products)
		{
			$url = xtc_href_link($this->seoBoost->get_boosted_product_url($productId->asInt(), $name, $languageId), '',
			                     'NONSSL', false, true, false, false);
		}
		else
		{
			$url = xtc_href_link(FILENAME_PRODUCT_INFO, xtc_product_link($productId->asInt(), $name), 'NONSSL', false,
			                     true, false, false);
		}
		
		return $url;
	}
	
	
	/**
	 * Returns the ID of a language identified by its code.
	 * 
	 * @param \LanguageCode $languageCode
	 *
	 * @return int
	 */
	protected function getLanguageIdByCode(\LanguageCode $languageCode)
	{
		if(isset($this->languageIds[$languageCode->asString()]))
		{
			return $this->languageIds[$languageCode->asString()];
		}
		
		return $this->languageIds[$languageCode->asString()] = $this->languageProvider->getIdByCode($languageCode);
	}
}