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

use OfficeBrain\Bundle\RequestQuoteBundle\Manager\AbstractManager\RequestQuoteAbstract;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\Session\Flash\FlashBag;
use Symfony\Component\DependencyInjection\ContainerInterface as Container;


class RequestQuoteGuestExtended extends RequestQuoteAbstract
{

	public function __construct($entityManager, $request, $twigManager, $sessionManager,$productDetailManager, $userManager, $emailManager, $userContactBookManager, $coreManager,$paginatorManager,$commonLibraryManager,$cmsMediaLib,$productApi, $serviceRuleApi)
    {
        parent::__construct($entityManager, $request, $twigManager, $sessionManager,$productDetailManager, $userManager, $emailManager, $userContactBookManager, $coreManager,$paginatorManager,$commonLibraryManager,$cmsMediaLib,$productApi, $serviceRuleApi);
    }

    public function __destruct()
    {
        parent::__destruct();
    }
    /**
     * @author Employee Id: 4532
     * To set uploaded logo in session for guest user
     * @param string logoName
     */
    
    public function setUploadLogoToSession($logoName){
    
    	//$this->sessionManager->remove('request_quotes_upload_logo'); die;
    	$logoNameArray = $this->sessionManager->get('request_quotes_upload_logo');
    	$logoNameArray = json_decode($logoNameArray);
    	if(!empty($logoNameArray)){
    		array_push($logoNameArray, $logoName);
    	}else{
    		$logoNameArray[] = $logoName;
    	}
    	$this->sessionManager->set('request_quotes_upload_logo', json_encode($logoNameArray));
    	$sessionUploadLogoName = $this->sessionManager->get('request_quotes_upload_logo');
    
    	return $sessionUploadLogoName;
    
    }
    
    /**
     * @author Employee Id: 4532
     * To remove uploaded logo from session
     * @param string fileName
     */
    
    public function imageRemovedFromSession($fileName){
    	$logoNameArray = $this->sessionManager->get('request_quotes_upload_logo');
    	$logoNameArrayDecode = json_decode($logoNameArray);
    	foreach($logoNameArrayDecode as $key=>$value){
    		if($value == $fileName){
    			unset($logoNameArrayDecode[$key]);
    		}
    	}
    	$logoNameArrayEncode = json_encode($logoNameArrayDecode);
    	$this->sessionManager->set('request_quotes_upload_logo', $logoNameArrayEncode);
    	return $logoNameArrayEncode;
    }
    
    public function setRequestQuoteAddGuestContactInSession(){
    	$data =array();
    	$shipData =array();
    	$shipDataArray =array();
    	if($this->sessionManager->has('guest_shipping_address')){
    		//$this->sessionManager->remove('guest_shipping_address'); die;
    		$sessionData = $this->sessionManager->get('guest_shipping_address');
    		$productId =  $this->request->get('guest_shipping_method_product_id');
    		$counter = $this->request->get( 'counter' );
    		$shippingDetail = $this->request->get( 'shipping' );
    		$method = $this->request->get('guest_shipping_method_type');
    
    		if($method=="split"){
    			if(array_key_exists('standard',$sessionData[$productId])){
    				unset($sessionData[$productId]['standard']);
    			}
    		}else{
    			if(array_key_exists('split',$sessionData[$productId])){
    				unset($sessionData[$productId]['split']);
    			}
    		}
    		if(array_key_exists($method,$sessionData[$productId])){
    			$sessionData[$productId][$method][$counter]=$shippingDetail;
    		}else{
    			$shipDataArray[$counter]= $shippingDetail;
    			$sessionData[$productId][$method]=$shipDataArray;
    		}
    		$this->sessionManager->set('guest_shipping_address',$sessionData);
    	}else{
    		$productId =  $this->request->get('guest_shipping_method_product_id');
    		$counter = $this->request->get( 'counter' );
    		$shippingDetail = $this->request->get( 'shipping' );
    		$method = $this->request->get('guest_shipping_method_type');
    		$shipDataArray[$counter]= $shippingDetail;
    		$shipData[$method]=$shipDataArray;
    		$data[$productId] = $shipData;
    		$this->sessionManager->set('guest_shipping_address',$data);
    	}
    	$sessionData = $this->sessionManager->get('guest_shipping_address');
    	return array('product_id'=>$productId,'method'=>$method,'counter'=>$counter,'status'=>'success');
    }
    
    public function getRequestQuoteGuestContactInSession(){
    	$productId =  $this->request->get('product_id');
    	$counter = $this->request->get( 'counter' );
    	$method = $this->request->get( 'method' );
    	$sessionData = $this->sessionManager->get('guest_shipping_address');
    	return array('shipping_data'=>$sessionData[$productId][$method][$counter],'counter'=>$counter,'method'=>$method,'product_id'=>$productId);
    }

    public function getRequestQuoteGuestContactEdit(){
    	$productId =  $this->request->get('product_id');
    	$counter = $this->request->get( 'counter' );
    	$method = $this->request->get( 'method' );
    	$this->request->get('shipping_detail_guest');
    	$shippingData = $this->request->get('shipping_detail_guest');
    	//$this->sessionManager->set('guest_shipping_address_edit',$shippingData);
    	return array('shipping_data'=>$shippingData[$productId][$method][$counter],'counter'=>$counter,'method'=>$method,'product_id'=>$productId);
    }
    
    public function getRequestQuoteGuestContactEditMode(){
    	$productId =  $this->request->get('product_id');
    	$counter = $this->request->get( 'counter' );
    	$method = $this->request->get( 'method' ); 
    	$inputData = $this->sessionManager->get('request_quotes');
    	$sessionData = $inputData[$productId]['guest_shipping_detail'];
    	return array('shipping_data'=>$sessionData[$productId][$method][$counter],'counter'=>$counter,'method'=>$method,'product_id'=>$productId);
    }
    
    public function getRequestQuoteGuestContactEditInProductConfig(){
    	$data =array();
    	$shipData =array();
    	$shipDataArray =array();
    	$productId =  $this->request->get('guest_shipping_method_product_id');
    	$counter = $this->request->get( 'counter' );
    	$shippingDetail = $this->request->get( 'shipping' );
    	$method = $this->request->get('guest_shipping_method_type');
    	
    	if($this->sessionManager->has('request_quotes')){
    		$inputData = $this->sessionManager->get('request_quotes');
    		$sessionData = $inputData[$productId]['guest_shipping_detail'];
    		if($method=="split"){
    			if(array_key_exists('standard',$sessionData[$productId])){
    				unset($sessionData[$productId]['standard']);
    			}
    		}else{
    			if(array_key_exists('split',$sessionData[$productId])){
    				unset($sessionData[$productId]['split']);
    			}
    		}
    		if(array_key_exists($method,$sessionData[$productId])){
    			$sessionData[$productId][$method][$counter]=$shippingDetail;
    		}else{
    			$shipDataArray[$counter]= $shippingDetail;
    			$sessionData[$productId][$method]=$shipDataArray;
    		}
    		$inputData[$productId]['guest_shipping_detail']=$sessionData;
    		$this->sessionManager->set('request_quotes',$inputData);
    	}
    	$sessionData = $this->sessionManager->get('request_quotes');
    	return array('product_id'=>$productId,'method'=>$method,'counter'=>$counter,'status'=>'success');
    }
    
    public function addShippingBillingForGuest($userObj){
    	$quoteData = $this->getRequestQuoteListData();
    	foreach($quoteData as $key=>$data){
    		//if(array_key_exists($data['product_id'],$aryQuoteList)){
	    		foreach($data['split'] as $index=>$addressData){
	    			if(isset($addressData['shipping_detail'])){
				    	$statuBilling=$this->userContactBookManager->addBillingShippingAddresssForQuote($addressData['shipping_detail'],1,1,$userObj); // For billing address
				    	$statuShipping=$this->userContactBookManager->addBillingShippingAddresssForQuote($addressData['shipping_detail'],2,1,$userObj);// For shipping address
				    	//$aryQuoteList[$data['product_id']]['shipping_method']['shipping_detail'][$index]['selected_address_id']=$statuShipping['data']->getId();
	    			}
	    		}
    		//}
    	}
    	//$this->sessionManager->set('request_quotes',$aryQuoteList);
    }

	// Nishant -     
    public function addShippingBillingForNonRegisteredGuest($userObj){
    	$quoteData = $this->getRequestQuoteListData();
    	foreach($quoteData as $key=>$data){
    		//if(array_key_exists($data['product_id'],$aryQuoteList)){
    		foreach($data['split'] as $index=>$addressData){
    			$statuBilling=$this->userContactBookManager->addBillingShippingAddresssForQuote($addressData['shipping_detail'],1,1,$userObj); // For billing address
    			$statuShipping=$this->userContactBookManager->addBillingShippingAddresssForQuote($addressData['shipping_detail'],2,1,$userObj);// For shipping address
    			//$aryQuoteList[$data['product_id']]['shipping_method']['shipping_detail'][$index]['selected_address_id']=$statuShipping['data']->getId();
    		}
    		//}
    	}
    	//$this->sessionManager->set('request_quotes',$aryQuoteList);
    }
    
    
    
    /**
     * @author Employee Id: 4248
     * OB eCommerce Product - Requestquote
     * To get form detail of guest user.
     * @param array object data
     * return status array
     */
    public function setRequestQuoteGuestInfo($data)
    {
    	$guestInfo=array();
    	$config=$this->request->get('project_setting');
    	
    	/* Prepare data for request quote guest user table */
    	$guestInfo['form_data']['first_name']	= $data['firstName'];
    	$guestInfo['form_data']['email']		= $data['email'];
    	$guestInfo['form_data']['zipcode']		= $data['zipcode'];
    	$guestInfo['form_data']['phone']		= $data['phone'];
    	$guestInfo['form_data']['companyName']	= $data['companyName'];
    	$guestInfo['form_data']['instance_type']= $config['instance_type'];
    	$guestInfo['form_data']['instance_id']	= $config['instance_id'];
    	$status = $this->entityManager->getRepository('OfficeBrainRequestQuoteBundle:RequestQuoteGuestUser')->setRequestQuoteGuestUser($guestInfo);
    	
    	// Add email code here
    	//$this->sessionManager->removeSession('request_info_single');
    	return $status; 
    }
    
    
	/**
     * @author Employee Id: 4248
     * OB eCommerce Product - Guest User Email Content
     * To get form detail of guest user.
     * @param array object data
     * return status array
     */
    public function getGuestUserRequestQuoteList($guestId)
    {
    	return $this->requestQuoteMasterRepositoryManager->getGuestUserRequestQuoteList($guestId);
    	//$guestInfo=array();
    	//return $status; 
    }

	private function checkInArray($item , $array){
	    return preg_match('/'.$item.'/i' , json_encode($array));
	}
	
	public function checkForAttribute($colorAttr){
		$attrIds = $this->productDetailManager->getAttributeIds();
		$data = array();
		if($this->checkInArray($attrIds["trim_color_id"], $colorAttr)){
			$data['is_trim_color'] = 1; 
			$data['trim_color_id'] = $attrIds["trim_color_id"];
		}else{
			$data['is_trim_color'] = 0; 
			$data['trim_color_id'] = $attrIds["trim_color_id"];
		}
			
		if($this->checkInArray($attrIds["ink_color_id"], $colorAttr)){
			$data['is_ink_color'] = 1; 
			$data['ink_color_id'] = $attrIds["ink_color_id"];
			
		}else{
			$data['is_ink_color'] = 0; 
			$data['ink_color_id'] = $attrIds["ink_color_id"];
		}
			
		if($this->checkInArray($attrIds["barrel_color_id"], $colorAttr)){
			$data['is_barrel_color'] = 1; 
			$data['barrel_color_id'] = $attrIds["barrel_color_id"];
		}else{
			$data['is_barrel_color'] = 0; 
			$data['barrel_color_id'] = $attrIds["barrel_color_id"];
		}
		if($this->checkInArray($attrIds["std_color_id"], $colorAttr)){
			$data['is_standard_color'] = 1; 
			$data['std_color_id'] = $attrIds["std_color_id"];
		}else{
			$data['is_standard_color'] = 0; 
			$data['std_color_id'] = $attrIds["std_color_id"];
		}
		$data['color_attr_id'] = $attrIds['color_attr_id'];
		//$data['std_color_id'] = $attrIds['std_color_id'];
		return $data;
	}
	
    
}