<?php

namespace OfficeBrain\Bundle\CompareProductBundle\Entity;

use Doctrine\ORM\EntityRepository;
use Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * RequestInfoRepository
 *
 * This class was generated by the Doctrine ORM. Add your own custom
 * repository methods below.
 */
class CompareProductRepository extends EntityRepository
{
    protected $projectSetting;
    protected $instanceId;
    protected $instanceType;
    protected $cultureId;
    protected $cultureCode;
    protected $createdUid;
    protected $upatedUid;
    
    public function setProjectSetting($projetSetting)
    {
        $this->projectSetting = $projetSetting;
        $this->prepareProjectSettingData();
    }
    
    public function getProjectSetting()
    {
        return $this->projetSetting;
    }
    
    public function prepareProjectSettingData()
    {
        $this->instanceId = $this->projectSetting['instance_id'];
        $this->instanceType = $this->projectSetting['instance_type'];
        $this->userId = $this->projectSetting['user_id'];
        $this->cultureId = $this->projectSetting['culture_id'];
        $this->cultureCode = $this->projectSetting['culture_code'];
        $this->createdUid = $this->userId;
        $this->upatedUid =$this->userId;
    }
    
    public function getQueryBudler()
    {
        return $this->getEntityManager()->getRepository('OfficeBrainCompareProductBundle:CompareProduct')->createQueryBuilder('cp');
    }
     
    /**
     * To get total count
     *
     * @param integer $userId
     * @return number
     */
    public function getTotalCountUserWise($currentCulCode)
    {
    	$queryBuilder = $this->getQueryBudler();
    	$queryBuilder->select('COUNT(cp.id)');
    	$queryBuilder->where('cp.userId = :userId AND cp.cultureId = :cultureId AND cp.instanceId = :instanceId AND cp.productCountryDetail LIKE :productCountryDetail');
    	$queryBuilder->setParameter('userId', $this->userId)
    				 ->setParameter('cultureId', $this->cultureId)
    				 ->setParameter('productCountryDetail', '%'.$currentCulCode.'%')
    				 ->setParameter('instanceId', $this->instanceId);
    	
    	return $queryBuilder->getQuery()->getSingleScalarResult();
    }
    
    /**
     * to persist object data
     * @param integer $productId
     * @param integer $cultureProductId
     *
     * @return \OfficeBrain\Bundle\CompareProductBundle\Entity\CompareProduct
     */
    public function addToCompareProduct($productId, $cultureProductId,$productCountryDetail)
    {
        $compareProduct = new CompareProduct();
        $compareProduct->setProductId($productId);
        $compareProduct->setCultureProductId($cultureProductId);
        $compareProduct->setCultureId($this->cultureId);
        $compareProduct->setUserId($this->userId);
        $compareProduct->setCreatedUid($this->createdUid);
        $compareProduct->setUpatedUid($this->upatedUid);
        $compareProduct->setInstanceId($this->instanceId);
        $compareProduct->setProductCountryDetail($productCountryDetail);
        $compareProduct->setInstanceType($this->instanceType);

        $em = $this->getEntityManager();
        $em->persist($compareProduct);
        $em->flush();

        return $compareProduct;
    }
    
    public function isCompareProductExists($productId, $cultureProductId,$currentCulCode)
    {
    	
        $queryBuilder = $this->getQueryBudler();
        $queryBuilder->select('cp.id', 'cp.productId', 'cp.cultureProductId', 'cp.cultureId', 'cp.userId as userId');
        $queryBuilder->where('cp.userId = :userId AND cp.cultureId = :cultureId AND cp.productId = :productId AND cp.cultureProductId = :cultureProductId AND cp.instanceId = :instanceId AND cp.productCountryDetail LIKE :productCountryDetail');
        $queryBuilder->setParameter('userId', $this->userId)
            		 ->setParameter('productId', $productId)
            		 ->setParameter('cultureProductId', $cultureProductId)
            		 ->setParameter('productCountryDetail', '%'.$currentCulCode.'%')
            		 ->setParameter('cultureId', $this->cultureId)
            		 ->setParameter('instanceId', $this->instanceId);
        return $queryBuilder->getQuery()->getResult();
	}
    
    /**
     * to get compare product data for particular user
     * @param integer $userId
     * @return \OfficeBrain\Bundle\CompareProductBundle\Entity\CompareProduct
     */
    public function getCompareProduct($currentCulCode)
    {
        $queryBuilder = $this->getQueryBudler();
        $queryBuilder->select('cp.id', 'cp.productId', 'cp.cultureProductId', 'cp.cultureId', 'cp.userId as userId');
        $queryBuilder->where('cp.userId= :userId AND cp.cultureId= :cultureId AND cp.instanceId = :instanceId AND cp.productCountryDetail LIKE :productCountryDetail')
                     ->setParameter('userId', $this->userId)
                     ->setParameter('cultureId', $this->cultureId)
                     ->setParameter('productCountryDetail', '%'.$currentCulCode.'%')
                     ->setParameter('instanceId', $this->instanceId);

        return $queryBuilder->getQuery()->getResult();
    }
    
    public function deleteCompareProduct($productId, $cultureProductId)
    {
        $queryBuilder = $this->getQueryBudler();
        $queryBuilder->delete('OfficeBrainCompareProductBundle:CompareProduct', 'cp');
//         $queryBuilder->where('cp.productId = :productId AND cp.cultureProductId = :cultureProductId AND cp.userId = :userId AND cp.cultureId = :cultureId AND cp.instanceId = :instanceId')
// 			         ->setParameter('productId', $productId)
// 			         ->setParameter('cultureProductId', $cultureProductId)
// 			         ->setParameter('userId', $this->userId)
// 			         ->setParameter('cultureId', $this->cultureId)
// 			         ->setParameter('instanceId', $this->instanceId);

        $queryBuilder->where('cp.productId = :productId AND cp.userId = :userId AND cp.cultureId = :cultureId AND cp.instanceId = :instanceId')
        ->setParameter('productId', $productId)
        ->setParameter('userId', $this->userId)
        ->setParameter('cultureId', $this->cultureId)
        ->setParameter('instanceId', $this->instanceId);
    
        return $queryBuilder->getQuery()->execute();
    }
    
    public function deleteAllCompareProduct($currentCulCode)
    {
        $queryBuilder = $this->getQueryBudler();
        $queryBuilder->delete('OfficeBrainCompareProductBundle:CompareProduct', 'cp');
        $queryBuilder->where('cp.userId = :userId AND cp.cultureId = :cultureId AND cp.instanceId = :instanceId AND cp.productCountryDetail LIKE :productCountryDetail')
			         ->setParameter('userId', $this->userId)
			         ->setParameter('cultureId', $this->cultureId)
			         ->setParameter('productCountryDetail', '%'.$currentCulCode.'%')
			         ->setParameter('instanceId', $this->instanceId);
    
        return $queryBuilder->getQuery()->execute();
    }
}
