<?php
namespace OfficeBrain\Bundle\RequestInfoBundle\Manager\Extended;

use OfficeBrain\Bundle\RequestInfoBundle\Manager\AbstractManager\RequestInfoAbstract;

class RequestInfoRegisteredExtended extends RequestInfoAbstract
{
    /**
	 * @author Employee Id: 4203
	 * OB eCommerce Product - Requestinfo
	 * Initialize the required variable on class load
	*/
	
	public function __construct($entityManager, $request, $twigManager, $sessionManager, $productDetailManager, $userDetailManager, $emailManager, $paginatorManager)
	{
		parent::__construct($entityManager, $request, $twigManager, $sessionManager, $productDetailManager, $userDetailManager, $emailManager, $paginatorManager);
	}
	
	public function __destruct()
	{
		parent::__destruct();
	}
	
	/**
	 * @author Employee Id: 4203
	 * OB eCommerce Product - Requestinfo
	 * To set the product in session or set in database
	 * @param array object data
	 * return status in array
	 */
	public function setRequestInfo($data)
	{
		$saveData = array();
        $config = $this->request->get('project_setting');
        $userSetting = $this->request->get('project_user_setting');
        $siteOwnerId = $config['site_owner_id'];
        $productId = $data->product_id;
        $productDetail = $this->getProductDetailById($productId, $config['culture_code']);
        $productDetail[$productId]['attribute'] = array();
		$multiple = $config['configuration_rule']['transaction']['request_info']['multiple_product'];
        if ($multiple == 1) 
        {
			$status=$this->session->setProductToSession($productDetail[$productId],'request_info');
			return $status; // 'ADD_SUCCESS_IN_SESSION';
		} else {
		    $saveData['request_info']['guest_id']=0;
			$saveData['request_info']['user_id']=$config['user_id'];
			$saveData['request_info']['note']=$data->getNote();
            $saveData['request_info']['erp_id']=$data->getErpId();
			$saveData['request_info']['created_uid']=$config['user_id'];
			$saveData['request_info']['instance_type']=$config['instance_type'];
			$saveData['request_info']['instance_id']=$config['instance_id'];
			$saveData['request_info']['state']=$data->getState();
            $saveData['request_info']['culture']=$config['culture_code'];
            
            if ($saveData['request_info']['culture'] != $this->request->getLocale()) {
            	$country = $this->productDetailManager->getCountry();
            	$locale = explode('_', $this->request->getLocale());

            	if (isset($locale[1]) && isset($country[$locale[1]])) {
            		$saveData['request_info']['culture']=$this->request->getLocale();
            	}
            }
            
            
            if($userSetting['user_data']->getUserType()=="distributor"){
            	$saveData['request_info']['distributor']=$siteOwnerId;
            }else{
				$saveData['request_info']['distributor']=$data->getDistributor();
            }
			$saveData['product_info']['product_id']=$productDetail[$productId]['product_id'];
			$saveData['product_info']['culture_product_id']=$productDetail[$productId]['culture_product_id'];
			
			$saveData['product_info']['line_id']=$productDetail[$productId]['brand']['id'];
			$saveData['product_info']['line_name']=$productDetail[$productId]['brand']['name'];
			$saveData['product_info']['currency_id']=$productDetail[$productId]['currency']['id'];
			$saveData['product_info']['currency_name']=$productDetail[$productId]['currency']['name'];
			$saveData['product_info']['currency']=$productDetail[$productId]['currency']['currency'];
			$saveData['product_info']['currency_symbol']=$productDetail[$productId]['currency']['symbol'];
			$saveData['product_info']['product_slug']=$productDetail[$productId]['basic_information']['slug'];
			$saveData['product_info']['product_name']=$productDetail[$productId]['basic_information']['title'];
			$saveData['product_info']['product_sku']=$productDetail[$productId]['basic_information']['sku_number'];
			$saveData['product_info']['product_description']=$productDetail[$productId]['basic_information']['description'];
			$saveData['product_info']['product_thumb_image']='';
			$saveData['product_info']['product_image']=$productDetail[$productId]['basic_information']['default_image_url'];
			$saveData['product_info']['product_supplier_id']=$productDetail[$productId]['supplier']['supplier_id'];
			$saveData['product_info']['created_uid']=$config['user_id'];
			$saveData['product_info']['instance_type']=$config['instance_type'];
			$saveData['product_info']['instance_id']=$config['instance_id'];
			$saveData['product_info']['price_unit']=$productDetail[$productId]['price_unit'];
			if(isset($productDetail[$productId]['variation_pricing']) && (!(empty($productDetail[$productId]['variation_pricing']))))
			{
				$saveData['product_info']['variation_pricing']=serialize($productDetail[$productId]['variation_pricing']);
			}
			else 
			{
				$saveData['product_info']['variation_pricing']='';
			}
			
			$saveData['supplier_info']['supplier_id']=$productDetail[$productId]['supplier']['supplier_id'];
			$saveData['supplier_info']['supplier_name']=$productDetail[$productId]['supplier']['name'];
			$saveData['supplier_info']['code']=(isset($productDetail[$productId]['supplier']['code'])  && $productDetail[$productId]['supplier']['code']!='') ? $productDetail[$productId]['supplier']['code']: NULL;
			$saveData['supplier_info']['email_address']=(isset($productDetail[$productId]['supplier']['email_address'])  && $productDetail[$productId]['supplier']['email_address']!='') ? $productDetail[$productId]['supplier']['email_address']: NULL;
			$saveData['supplier_info']['website']=(isset($productDetail[$productId]['supplier']['website'])  && $productDetail[$productId]['supplier']['website']!='') ? $productDetail[$productId]['supplier']['website']: NULL;
			$saveData['supplier_info']['image']=(isset($productDetail[$productId]['supplier']['image'])  && $productDetail[$productId]['supplier']['image']!='') ? $productDetail[$productId]['supplier']['image']: NULL;
			$saveData['supplier_info']['fax']=(isset($productDetail[$productId]['supplier']['contact_information']['fax'])  && $productDetail[$productId]['supplier']['contact_information']['fax']!='') ? $productDetail[$productId]['supplier']['contact_information']['fax']: NULL;
			$saveData['supplier_info']['mobile']=(isset($productDetail[$productId]['supplier']['contact_information']['mobile'])  && $productDetail[$productId]['supplier']['contact_information']['mobile']!='') ? $productDetail[$productId]['supplier']['contact_information']['mobile']: NULL;
			$saveData['supplier_info']['telephone']=(isset($productDetail[$productId]['supplier']['contact_information']['telephone'])  && $productDetail[$productId]['supplier']['contact_information']['telephone']!='') ? $productDetail[$productId]['supplier']['contact_information']['telephone']: NULL;
			
			$saveData['product_pricing']['quantity']=$this->getProductPricingArray($productDetail[$productId]['price_type'],$productDetail[$productId]['pricing']);
			$saveData['product_pricing']['created_uid']=$config['user_id'];
			$saveData['product_pricing']['instance_type']=$config['instance_type'];
			$saveData['product_pricing']['instance_id']=$config['instance_id'];
				
			$saveData['product_attribute']['attribute']=$productDetail[$productId]['attributes'];
			$saveData['product_attribute']['created_uid']=$config['user_id'];
			$saveData['product_attribute']['instance_type']=$config['instance_type'];
			$saveData['product_attribute']['instance_id']=$config['instance_id'];
            $status = $this->entityManager->getRepository('OfficeBrainRequestInfoBundle:RequestInfo')->setRequestInfoSingleRecord($saveData, $config['user_id']);
            
            /*if($status['status'] == 'ADD_RECORD_SUCCESSFULLY'){
           	 	$this->sendRequestInfoEmail($status['data']);
            }*/
			return $status;
		}
	}
	
	/**
	 * @author Employee Id: 4203
	 * OB eCommerce Product - Requestinfo
	 * To prevent method not found exception.
	 * @param array object data
	 * return null
	 */
	public function setGuestInfo($data)
	{
	}
		
	/**
	 * @author Employee Id: 4203
	 * OB eCommerce Product - Requestinfo
	 * To get single record by id from request info
	 * @param null
	 * return array object data of request info
	 */
	public function getRequestInfoDetailById()
	{
		$mediator = $this->entityManager->getRepository('OfficeBrainRequestInfoBundle:RequestInfo')->getRequestInfoDetailById($this->request->get('request_info_id'));
		$productInfoRequest = $mediator->getProductInfoRequest();
		foreach($productInfoRequest as $productInfoRequestIndex => $productInfoRequestData){
			$variationPricing = $productInfoRequestData->getVariationPricing();
			if($variationPricing != ''){
				$productInfoRequest[$productInfoRequestIndex]->setVariationPricing(unserialize($variationPricing));
			}
		}
		return $mediator;
	}
	
	
	/**
	 * @author Employee Id: 4203
	 * OB eCommerce Product - Requestinfo
	 * To get single record by id from request info
	 * @param null
	 * return array object data of request info
	 */
	public function getInquiryDetailById($id)
	{
		return $this->entityManager->getRepository('OfficeBrainRequestInfoBundle:RequestInfo')->getRequestInfoDetailById($id);
	}
	
	/**
	 * @author Employee Id: 4203
	 * OB eCommerce Product - Requestinfo
	 * To get all register user request info list
	 * @param null
	 * return array object of request info
	 */
	public function getRequestInfoList($page,$recordsPerPage)
	{
		return $this->entityManager->getRepository('OfficeBrainRequestInfoBundle:RequestInfo')->getRequestInfoList($this->userId,$page,$recordsPerPage);
	}
	
	public function setCommentRequestInfo($data)
	{
		$config = $this->request->get('project_setting');
		return $this->entityManager->getRepository('OfficeBrainRequestInfoBundle:CommentRequestInfo')->setRequestComment($data, $config);
	}
	
	public function getCommentRequestInfoList()
	{
		return $this->entityManager->getRepository('OfficeBrainRequestInfoBundle:CommentRequestInfo')->getCommentRequestInfoDetailById($this->request->get('request_info_id'));
	}

	public function getRequestSampleList($page,$recordsPerPage)
	{

		return $this->entityManager->getRepository('OfficeBrainRequestInfoBundle:RequestInfo')->getRequestSampleList($this->userId,$page,$recordsPerPage);

	}

	public function getAskQuestionList($page,$recordsPerPage)
	{

		return $this->entityManager->getRepository('OfficeBrainRequestInfoBundle:RequestInfo')->getAskQuestionList($this->userId,$page,$recordsPerPage);

	}

	public function getRequestAdminSampleList($page,$recordsPerPage)
	{

		return $this->entityManager->getRepository('OfficeBrainRequestInfoBundle:RequestInfo')->getRequestAdminSampleList($page,$recordsPerPage);

	}
	public function getAdminAskQuestionList($page,$recordsPerPage)
	{

		return $this->entityManager->getRepository('OfficeBrainRequestInfoBundle:RequestInfo')->getAdminAskQuestionList($page,$recordsPerPage);

	}
}