<?php

namespace OfficeBrain\Bundle\OrderBundle\Entity;

use Doctrine\ORM\EntityRepository;

/**
 * PreAddToCartRepository
 *
 * This class was generated by the Doctrine ORM. Add your own custom
 * repository methods below.
 */
class PreAddToCartRepository extends EntityRepository
{
	
	protected $projectSetting;
	protected $instanceId;
	protected $instanceType;
	protected $cultureId;
	protected $cultureCode;

	public function setProjectSetting($projectSetting)
	{
		$this->projectSetting = $projectSetting;
		$this->prepareProjectSettingData();
	}
	
	public function prepareProjectSettingData()
	{
		$this->userId = $this->projectSetting['user_id'];
		$this->userType = $this->projectSetting['user_type'];
		$this->createdUid = $this->upatedUid = $this->userId;
		$this->instanceId = $this->projectSetting['instance_id'];
		$this->instanceType = $this->projectSetting['instance_type'];
		$this->cultureId = $this->projectSetting['culture_id'];
		$this->cultureCode = $this->projectSetting['culture_code'];
	}
	
	/**
	 * @author Employee Id: 4203
	 * OB eCommerce Product - PreCart
	 * Function created for define a common querybuilder object
	 * @param integer $userId
	 * @return number
	 */
	public function getQueryBuilder()
	{
		return $this->getEntityManager()->getRepository('OfficeBrainOrderBundle:PreAddToCart')->createQueryBuilder('c');
	}
	
	public function isCartExists($productId, $cultureProductId)
	{
			
		$queryBuilder = $this->getQueryBuilder();
		$queryBuilder->select('count(c.id)');
		$queryBuilder->where('c.userId = :userId AND c.productId = :productId AND c.productCultureId = :productCultureId AND c.instanceId = :instanceId');
		$queryBuilder->setParameter('userId', $this->userId)
		->setParameter('productId', $productId)
		->setParameter('productCultureId', $cultureProductId)
		->setParameter('instanceId', $this->instanceId);
	
		$isCartExists = $queryBuilder->getQuery()->getSingleScalarResult();
	
		if ($isCartExists) 
		{
			return true;
		} 
		else 
		{
			return null;
		}
	}
	
	public function getCartDataForEdit($cartId)
	{
		$queryBuilder = $this->getQueryBuilder();
		$queryBuilder->select('c.id', 'c.productId','c.productCultureId', 'c.userId', 'c.productDetailConfiguration');
		$queryBuilder->where('c.userId = :userId AND c.id = :cartId AND c.instanceId = :instanceId AND c.instanceType = :instanceType')
		->setParameter('userId', $this->userId)
		->setParameter('instanceId', $this->instanceId)
		->setParameter('cartId', $cartId)
		->setParameter('instanceType', $this->instanceType);
		
		return $queryBuilder->getQuery()->getResult();
	}
	
	public function updateDataInCartById($cartObj,$productDetailConfiguration)
	{
		$cartObj->setProductDetailConfiguration($productDetailConfiguration);
		$em = $this->getEntityManager();
		$em->persist($cartObj);
		$em->flush();
	}
	
	public function getCartById($cartId)
	{
		$queryBuilder = $this->getQueryBuilder();
		$queryBuilder ->where('c.id = :cartId')
		->setParameter('cartId', $cartId);
		return $queryBuilder->getQuery()->getOneOrNullResult();
	}

	public function getCartByIds($cartIds)
	{
	    $queryBuilder = $this->getQueryBuilder();

	    $queryBuilder
	        ->where('c.id IN (:cartIds)')
	        ->setParameter('cartIds', $cartIds);

	    return $queryBuilder->getQuery()->getResult();
	}
	
	public function addToCart($productId, $cultureProductId,$productSlug,$productDetailConfiguration="",$productCountryDetail)
	{
		$cart = new PreAddToCart();
		$cart->setInstanceId($this->instanceId);
		$cart->setInstanceType($this->instanceType);
		$cart->setUserId($this->userId);
		$cart->setUserType($this->userType);
		$cart->setProductId($productId);
		$cart->setProductCultureId($cultureProductId);
		$cart->setProductSlug($productSlug);
		$cart->setProductDetailConfiguration($productDetailConfiguration);
		$cart->setProductCountryDetail($productCountryDetail);
		$em = $this->getEntityManager();
		$em->persist($cart);
		$em->flush();
	
		return $cart;
	}
	
	public function getTotalCountUserWise($currentCulCode)
	{
		$queryBuilder = $this->getQueryBuilder();
		$queryBuilder->select('count(c.id)');
		$queryBuilder->where('c.userId = :userId AND c.instanceId = :instanceId AND c.productCountryDetail LIKE :productCountryDetail')
		->setParameter('userId', $this->userId)
		->setParameter('productCountryDetail', '%'.$currentCulCode.'%')
		->setParameter('instanceId', $this->instanceId);
		return $queryBuilder->getQuery()->getSingleScalarResult();
	}
	
	public function getMaxNoOfProduct($maxNo)
	{
		$queryBuilder = $this->getQueryBuilder();
		$queryBuilder->select('c.id', 'c.productId', 'c.productCultureId', 'c.userId as userId');
		$queryBuilder->where('c.userId = :userId AND c.instanceId = :instanceId AND c.instanceType = :instanceType')
		->setParameter('userId', $this->userId)
		->setParameter('instanceId', $this->instanceId)
		->setParameter('instanceType', $this->instanceType)
		->setMaxResults($maxNo);
		return $queryBuilder->getQuery()->getResult();
	}
	
	public function getCart($maxNo=0,$currentCulCode)
	{
		$queryBuilder = $this->getQueryBuilder();
		$queryBuilder->select('c.id', 'c.productId','c.productCultureId', 'c.userId', 'c.productDetailConfiguration', 'c.productCountryDetail');
		$queryBuilder->where('c.userId = :userId AND c.instanceId = :instanceId AND c.instanceType = :instanceType AND c.productCountryDetail LIKE :productCountryDetail')
		->setParameter('userId', $this->userId)
		->setParameter('instanceId', $this->instanceId)
		->setParameter('productCountryDetail', '%'.$currentCulCode.'%')
		->setParameter('instanceType', $this->instanceType)
		->orderBy('c.id', 'DESC');
		if($maxNo!=0){
			$queryBuilder->setMaxResults($maxNo);
		}
		
		return $queryBuilder->getQuery()->getResult();
	}
	
	public function deleteCart($cartId)
	{
		$queryBuilder = $this->getQueryBuilder();
		$queryBuilder->delete('OfficeBrainOrderBundle:PreAddToCart', 'c');
		$queryBuilder->where('c.id = :cartId AND c.userId = :userId AND c.instanceId = :instanceId AND c.instanceType = :instanceType')
		->setParameter('cartId', $cartId)
		->setParameter('userId', $this->userId)
		->setParameter('instanceId', $this->instanceId)
		->setParameter('instanceType', $this->instanceType);
		return $queryBuilder->getQuery()->execute();
	}
	
	public function deleteAllCart($currentCulCode)
	{
		$queryBuilder = $this->getQueryBuilder();
		$queryBuilder->delete('OfficeBrainOrderBundle:PreAddToCart', 'c');
		$queryBuilder->where('c.userId = :userId AND c.instanceId = :instanceId AND c.instanceType = :instanceType AND c.productCountryDetail LIKE :productCountryDetail')
		->setParameter('userId', $this->userId)
		->setParameter('instanceId', $this->instanceId)
		->setParameter('productCountryDetail', '%'.$currentCulCode.'%')
		->setParameter('instanceType', $this->instanceType);
		return $queryBuilder->getQuery()->execute();
	}
}
