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

use OfficeBrain\Bundle\QuickQuoteBundle\Manager\AbstractManager\QuickQuoteAbstract;
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 QuickQuoteGuestExtended extends QuickQuoteAbstract
{

    public function __construct($entityManager, $request, $sessionManager, $productDetailManager, $emailServiceManager, $twigManager)
    {
        parent::__construct($entityManager, $request, $sessionManager, $productDetailManager, $emailServiceManager, $twigManager);
        $this->currentCulCode = substr($this->cultureCode, strpos($this->cultureCode, "_") + 1);
    }
    
    public function __destruct()
    {
        parent::__destruct();
        unset($this->currentCulCode);
    }
    
    public function setQuickQuote()
    {
    	$productId = $this->request->get('product_id');
    	$productSlug = $this->request->get('product_slug');
    	$cultureProductId = $this->request->get('culture_product_id');
    	
    	$pDetail = $this->productDetailManager->getProductDetailById($productId,$this->cultureCode);
    	$pstatus = $pDetail[$productId]['currency_for_other_country'];
    	$productCountryDetail = implode(",", array_keys($pstatus));
    	
    	$this->totalProduct = $this->getTotalCount();
        $productKey = $productId.':'.$cultureProductId;
        if (array_key_exists($productKey, $this->sessionProductId[$this->sessionInstanceKey])) {
            return 'ERROR_PRODUCT_ALREADY_EXISTS';
        } else {
            $this->sessionProductId[$this->sessionInstanceKey][$productKey] = array('productId'=>$productId, 'cultureProductId'=>$cultureProductId, 'productCalture'=>$productCountryDetail);
            $this->sessionManager->set('quick-quote-id', serialize($this->sessionProductId));
            $this->sessionProductId = unserialize($this->sessionManager->get('quick-quote-id'));
            
            unset($productId);
            unset($productKey);
            unset($cultureProductId);
            
            return 'SUCCESS';
        }
    }
    
    public function getTotalCount()
    {
    	/* if (!$this->totalProduct) {
            $this->totalProduct = count($this->sessionProductId[$this->sessionInstanceKey]);
        } */
        if (is_array($this->sessionProductId[$this->sessionInstanceKey]) && count($this->sessionProductId[$this->sessionInstanceKey]) > 0) {
        	foreach ($this->sessionProductId[$this->sessionInstanceKey] as $productInfo) {
        		$pCalture = explode(',',$productInfo['productCalture']);
        		if(in_array($this->currentCulCode,$pCalture)){
        			$totalProducts[] = $productInfo['productId'];
        		}
        	}
        	unset($productInfo);
        	unset($sessionProductId);
        }
        
        if (!$this->totalProduct) {
        	$this->totalProduct = count($totalProducts);
        }
        return $this->totalProduct;
    }
    
    public function getMaxNoOfQuickQuote($maxNo)
    {
    	$this->totalProduct = $this->getTotalCount();
    
        if ($this->totalProduct) {
            $this->getMaxNoOfQuickQuoteId($maxNo);
            $this->processPrepareQuickQuoteDetail();
            return $this->quickQuoteProducts;
        } else {
            return null;
        }
    }
    
    public function getMaxNoOfQuickQuoteId($maxNo)
    {
    	if (is_array($this->sessionProductId[$this->sessionInstanceKey]) && count($this->sessionProductId[$this->sessionInstanceKey]) > 0) {
            $productsDetail = array_slice($this->sessionProductId[$this->sessionInstanceKey], 0, $maxNo);
            if (is_array($productsDetail) && count($productsDetail)) {
                foreach ($productsDetail as $idArray) {
                	$pCalture = explode(',',$idArray['productCalture']);
                	if(in_array($this->currentCulCode,$pCalture)){
	                    $this->productIdArray[] = $idArray['productId'];
	                    $this->cultureProductIdArray[] = $idArray['cultureProductId'];
                	}
                }
                unset($productsDetail);
            }
        }
    }
    
    public function getQuickQuote()
    {
        $this->totalProduct = $this->getTotalCount();
        if ($this->totalProduct) {
            $this->processPrepareQuickQuoteId();
            $this->processPrepareQuickQuoteDetail();
            return $this->quickQuoteProducts;
        } else {
            return null;
        }
    }
    
    public function processPrepareQuickQuoteDetail()
    {
        if (is_array($this->productIdArray) && count($this->productIdArray)) {
            $productIds = json_encode($this->productIdArray);
            $this->quickQuoteProducts = $this->getProductDetailById(json_encode($this->productIdArray), $this->cultureCode);
        }
        unset($productIds);
    }

    public function processPrepareQuickQuoteId()
    {
        $quickQuoteDetails = $this->prepareQuickQuoteId();
        if (is_array($quickQuoteDetails) && count($quickQuoteDetails)) {
            foreach ($quickQuoteDetails as $ids) {
            	$pCalture = explode(',',$ids['productCalture']);
            	if(in_array($this->currentCulCode,$pCalture)){
	                $this->productIdArray[] = $ids['productId'];
	                $this->cultureProductIdArray[] = $ids['id'];
            	}
            }
            unset($quickQuoteDetails);
        }
    }
    
    public function prepareQuickQuoteId()
    {
    	if (is_array($this->sessionProductId[$this->sessionInstanceKey]) && count($this->sessionProductId[$this->sessionInstanceKey]) > 0) {
            foreach ($this->sessionProductId[$this->sessionInstanceKey] as $productInfo) {
            	$pCalture = explode(',',$productInfo['productCalture']);
            	if(in_array($this->currentCulCode,$pCalture)){
	                $this->productIdArray[] = $productInfo['productId'];
	                $this->cultureProductIdArray[] = $productInfo['cultureProductId'];
            	}
            }
            unset($productInfo);
            unset($sessionProductId);
        }
    }
   
    public function deleteQuickQuote($productId, $cultureProductId)
    {
        if (is_array($this->sessionProductId[$this->sessionInstanceKey]) && count($this->sessionProductId[$this->sessionInstanceKey])) {
            $quickQuoteKey = $productId.':'.$cultureProductId;
            if (array_key_exists($quickQuoteKey, $this->sessionProductId[$this->sessionInstanceKey])) {
                unset($this->sessionProductId[$this->sessionInstanceKey][$quickQuoteKey]);
                $this->sessionManager->set('quick-quote-id', serialize($this->sessionProductId));
            }
            return 'SUCCESS';
        }
    }
    
    public function deleteAllQuickQuote()
    {
        /* if (is_array($this->sessionProductId[$this->sessionInstanceKey]) && count($this->sessionProductId[$this->sessionInstanceKey])) {
            $this->sessionProductId[$this->sessionInstanceKey] = array();
            $this->sessionManager->set('quick-quote-id', serialize($this->sessionProductId));
            return 'SUCCESS';
        } */
    	if (is_array($this->sessionProductId[$this->sessionInstanceKey]) && count($this->sessionProductId[$this->sessionInstanceKey]) > 0) {
            foreach ($this->sessionProductId[$this->sessionInstanceKey] as $productInfo) {
            	$pCalture = explode(',',$productInfo['productCalture']);
            	if(in_array($this->currentCulCode,$pCalture)){
            		$quickQuoteKey = $productInfo['productId'].':'.$productInfo['cultureProductId'];
	                 unset($this->sessionProductId[$this->sessionInstanceKey][$quickQuoteKey]);
                	$this->sessionManager->set('quick-quote-id', serialize($this->sessionProductId));
            	}
            }
        }
    }
}
