<?php

namespace OfficeBrain\Bundle\AttributeBundle\Entity;

use Doctrine\ORM\EntityRepository;

/**
 * AttributeValueMappingRepository
 *
 * This class was generated by the Doctrine ORM. Add your own custom
 * repository methods below.
 */
class AttributeValueMappingRepository extends EntityRepository
{

	public function getAttributeSwatchesColorExport($attributeId){
		$query=$this->createQueryBuilder('avm')
		      ->select('avm.pmsId as attribute_value_id, avm.attributeName as attribute_value');
		if (trim($attributeId) != '') {
    	    $query->where('avm.attributeId = :attributeId');
    		$query->setParameter('attributeId', $attributeId);
		}
		$query->addOrderBy('avm.pmsId','ASC');
		return $query->getQuery()->getResult();
	}


	public function getAttributeSwatchesColor($attributeId,$start_index, $recordsPerPage, $searchBy, $searchKeyword){
		$query=$this->createQueryBuilder('avm')
		      ->select('avm.id as local_id, avm.pmsId as pms_id');
		if (trim($attributeId) != '') {
    	    $query->where('avm.attributeId = :attributeId');
    		$query->setParameter('attributeId', $attributeId);
		}
		if(trim($searchKeyword) !=""){
			if($searchBy!="pmsId"){
				$query->andWhere('avm.'.$searchBy.' LIKE :searchTerm')
            ->setParameter('searchTerm', '%'.$searchKeyword.'%');
        	}else{
        		$query->andWhere('avm.pmsId =:searchTerm')
            ->setParameter('searchTerm', $searchKeyword);
        	}
		}
		$query->addOrderBy('avm.pmsId','ASC');
		$returnData['all_data'] = $query->getQuery()->getResult();
		$query->setFirstResult($start_index )->setMaxResults( $recordsPerPage );
		$returnData['data'] = $query->getQuery()->getResult();
		return $returnData;

	}


	public function getAttributeValueMapping($attribute_id="",$attributeValuePmsId = "",$startValue=0,$attrValueReturn = '',$isFromAttributePage = 0)
	{
		$query=$this->createQueryBuilder('avm')
		      ->select('avm.id as local_id, avm.pmsId as pms_id');
		if (trim($attribute_id) != '') {
    	    $query->where('avm.attributeId = :attributeId');
    		$query->setParameter('attributeId', $attribute_id);
		}
		if (trim($attributeValuePmsId) != '') {
			$query->andWhere('avm.pmsId = :attributePmsId');
			$query->setParameter('attributePmsId', $attributeValuePmsId);
		}
		$query->addOrderBy('avm.pmsId','ASC');
		
		//TODO : Need To Improve :  When from Attribute Value
		if($isFromAttributePage == 1){
			$countQuery = $query;
			//$count = $countQuery->select('count(avm.id)')->getQuery()->getSingleScalarResult();
			$returnData['all_data'] = $query->getQuery()->getResult();
			$returnData['count'] = count($returnData['all_data']);
			//$returnData['all_data'] = $query->getQuery()->getResult();
			
			if ($attrValueReturn == '-1') {
				$query->select('avm.id as local_id, avm.pmsId as pms_id')->setFirstResult( $startValue );
			} else {
				$query->select('avm.id as local_id, avm.pmsId as pms_id')->setFirstResult( $startValue )->setMaxResults( $attrValueReturn );
			}
			$returnData['data'] = $query->getQuery()->getResult();
		}else{
			if($attrValueReturn != ''){
				if ($attrValueReturn == '-1') {
					$query->setFirstResult( $startValue );
				} else {
					$query->setFirstResult( $startValue )->setMaxResults( $attrValueReturn );
				}
				
			}
			$returnData= $query->getQuery()->getResult();
		}
		return $returnData;
	}
	public function addAttributeValueMapping($pms_id,$attribute_id)
	{
		$em = $this->getEntityManager();
		$attributeValueMapping = new AttributeValueMapping();
		$attributeValueMapping->setPmsId($pms_id);
		$attributeValueMapping->setAttributeId($attribute_id);
		$em->persist($attributeValueMapping);
		$em->flush();
		return $attributeValueMapping;
	}
	public function checkDuplicateAttribute($pms_id)
	{
		$data = $this->findOneBy(array('pmsId'=>$pms_id));
		return $data;
	}
	public function getBrandMapping()
	{
		$query=$this->createQueryBuilder('bm')
		->select('bm.id as local_id, bm.pmsId as pms_id');
		//echo $query->getQuery()->getSQL(); die;
		return $query->getQuery()->getResult();
	}
	public function removeAttributeValueMapping($pms_id,$attribute_id)
	{
		$objIMs = $this->createQueryBuilder('avm');
		$objIMs->delete('OfficeBrainAttributeBundle:AttributeValueMapping', 'avm')
		->where($objIMs->expr()->eq('avm.pmsId', ':objPmsId'))
		->setParameter('objPmsId', $pms_id)
		->andWhere($objIMs->expr()->eq('avm.attributeId', ':objAttributeId'))
		->setParameter('objAttributeId', $attribute_id)
		->getQuery() //-> getSQL();exit;
		->execute();
		return $objIMs;
	}
}
