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

use OfficeBrain\Bundle\BannerBundle\Manager\AbstractManager\BannerMasterAbstract as BannerMasterAbstract;
use Symfony\Component\DependencyInjection\ContainerInterface as Container;
use OfficeBrain\Bundle\BannerBundle\Entity\BannerLanguage;
use OfficeBrain\Bundle\BannerBundle\Entity\BannerMaster;
/**
 *
 * @author OfficeBrain 4571 <info@officebrain.com>
 *
 * Description : Extended class
 *
 */
class BannerMasterExtended extends BannerMasterAbstract
{
    /**
     *
     * @author Employee Id: 4571
     * Description : Set variables
     *
     * @param 1:  $entityManager
     * @param 2:  $request
     * @param 3:  $translator
     * @param 4:  $knpPaginator
     * @param 5:  $country
     * @param 6:  $language
     *
     * @return null
     *
     * @throws null
     *
     **/
    public function __construct($entityManager, $request, $translator, $knpPaginator, $country, $language)
    {
        parent::__construct($entityManager, $request, $translator, $knpPaginator, $country, $language);
    }
    
    /**
     *
     * @author Employee Id: 4571
     * Description : Unset variables
     *
     * @param : null
     *
     * @return null
     *
     * @throws null
     *
     **/
    public function __destruct()
    {
        parent::__destruct();
    }
    
    /**
     *
     * @author Employee Id: 4571
     * Description : Set Banner Master
     *
     * @param 1: Object $banner_master_obj
     *
     * @return Object
     *
     * @throws null
     *
     **/
    public function setBannerMaster($bannerMasterObj)
    {
        $bannerMasterObj->setCreatedUid($this->projectSetting['user_id']);
        $bannerMasterObj->setInstanceId($this->projectSetting['instance_id']);
        $bannerMasterObj->setInstanceType($this->projectSetting['instance_type']);
        
        return $this->bannerMasterRepo->set($bannerMasterObj);
    }
        
    /**
     * @author Employee Id: 4571
     * Description : Get Banner Type from id
     *
     * @param: $id
     *
     * @return result
     * @throws null
     *
     **/
    public function getBannerType($id)
    {
        return $this->bannerMasterRepo->find($id);
    }
    
    /**
     *
     * @author Employee Id: 4571
     * Description : Get Banner Type List
     *
     * @param null
     *
     * @return result
     *
     * @throws null
     *
     **/
    public function getBannerTypeListOld()
    {
        return $this->bannerMasterRepo->getBannerTypeList();
    }
    
    /**
     * @author Employee Id: 4571
     * Description : Get Banner Type List
     *
     * @param null
     *
     * @return Data Array
     *
     * @throws null
     *
     **/
    public function getBannerTypeList($searchWord=null)
    {
        $bannerArray = array();
        $bannerResults = array();
        $param = $this->request->get('_route_params');
        $page = $param['page'];
     
        $bannerArray = $this->bannerMasterRepo->getBannerTypeList($searchWord);
                         
        if (!empty($bannerArray)) {
            $i = 0;
            foreach ($bannerArray as $recordKey => $recordValue) {
                $bannerResults[$i]['id'] = $recordValue['id'];
                $bannerResults[$i]['culture'] = $this->culture;
                $bannerResults[$i]['bannerTypeName'] = $recordValue['bannerTypeName'];
                $bannerResults[$i]['bannerDimensions'] = $recordValue['bannerDimensions'];
                //$bannerResults[$i]['width'] = $recordValue['width'];
                $bannerResults[$i]['status'] = $recordValue['status'];
                $bannerResults[$i]['createdAt'] = $recordValue['createdAt'];
                //$bannerResults[$i]['updated_at'] = $recordValue['updatedAt'];
                $i++;
            }
        }
    
        $records_per_page = '12';
      //  $records_per_page = $param['records_per_page'];
    
        if (count($bannerResults) > 0) {
            $this->responseArray['banner'] = $bannerResults;
            $paginator  =  $this->knpPaginator; //$this->container->get('knp_paginator');
            $this->responseArray['pagination'] = $paginator->paginate($bannerResults, $page, $records_per_page, array(), count($bannerResults));
        }
    
        $this->responseArray['page'] = $page;
        $this->responseArray['culture'] = $this->culture;
        
        return $this->responseArray;
    }
    
    /**
     * @author Employee Id: 4571
     * Description : Get Banner Type List
     *
     * @param null
     *
     * @return Data Array
     *
     * @throws null
     *
     **/
    public function getBannerTypeListAjax()
    {
        $bannerArray = array();
        $bannerResults = array();
        $param = $this->request->get('_route_params');
        $page = $param['page'];
        
        $searchWord=trim($this->request->get('banner_type_search_query'));
            
        $bannerArray = $this->bannerMasterRepo->getBannerTypeList($searchWord);
    
        if (!empty($bannerArray)) {
            $i = 0;
            foreach ($bannerArray as $recordKey => $recordValue) {
                $bannerResults[$i]['id'] = $recordValue['id'];
                $bannerResults[$i]['culture'] = $this->culture;
                $bannerResults[$i]['bannerTypeName'] = $recordValue['bannerTypeName'];
                $bannerResults[$i]['bannerDimensions'] = $recordValue['bannerDimensions'];
                //$bannerResults[$i]['height'] = $recordValue['height'];
                //$bannerResults[$i]['width'] = $recordValue['width'];
                $bannerResults[$i]['status'] = $recordValue['status'];
                $bannerResults[$i]['createdAt'] = $recordValue['createdAt'];
                $i++;
            }
        }
    
        $records_per_page = $param['records_per_page'];
    
        if (count($bannerResults) > 0) {
            $this->responseArray['banner'] = $bannerResults;
            $paginator  =  $this->knpPaginator; //$this->container->get('knp_paginator');
            $this->responseArray['pagination'] = $paginator->paginate($bannerResults, $page, $records_per_page, array(), count($bannerResults));
        }
    
        $this->responseArray['page'] = $page;
        $this->responseArray['culture'] = $this->culture;
        
        return $this->responseArray;
    }
         
    /**
     * @author Employee Id: 4571
     * Description : Update Banner Type
     *
     * @param 1: Type object
     *
     * @return Repo object with Set value
     *
     * @throws null
     *
     **/
    public function updateBannerType($bannerMaster)
    {
        $bannerMaster->setUpdatedAt(new \DateTime());
        $bannerMaster->setUpdatedUid($this->projectSetting['user_id']);
        $bannerMaster->setInstanceId($this->projectSetting['instance_id']);
        $bannerMaster->setInstanceType($this->projectSetting['instance_type']);
        
        return $this->bannerMasterRepo->set($bannerMaster);
    }
    
    /**
     * @author Employee Id: 4571
     * Description : Update Banner Type
     *
     * @param $id
     *
     * @return object
     *
     * @throws null
     *
     **/
    public function deleteBannerType()
    {
        $id = $this->request->get("banner_type_id");
        
        if ($id) {
            $banner = $this->bannerRepo->findByBannerTyperId($id);
            if (!empty($banner) && count($banner) > 0) {
                //$this->session->getFlashBag()->add('error_message', $this->translator->trans('email.event.message.delete_error1'));
                return array('ERR_CAN_NOT_DELETE' => 'Can not delete');
            }

            return $this->bannerMasterRepo->deleteBannerTypes($id, $this->projectSetting['user_id']);
        }
    }
    
    /**
     * @author Employee Id: 4571
     * Description : Get Banner Type Dimensions
     *
     * @param $id
     *
     * @return object
     *
     * @throws null
     *
     **/
    public function getBannerTypeDimensions($id=0)
    {
        if ($id==0) {
            $id = $this->request->get("bannerTypeId");
        }
                        
        if ($id) {
            return $this->bannerMasterRepo->getDimensions($id);
        }
    }
    
    /**
     * @author Employee Id: 4465
     * Description : Set default Banner Type for CMS Banner when new subshop created
     *
     * @param $id
     *
     * @return object
     *
     * @throws null
     *
     **/
    public function cmsSetBannerType($instanceId,$bannerArray)
    {
    	// Change this to call from some json
    	$returnBannerTypeId = ""; 
    	$bannerTypeName = "Default Banner Type";
    	$bannerTypeCategory = "Home";
    	$bannerTypeCategoryId = "377";
    	$bannerDimensions = $bannerArray['dimensions'] ? $bannerArray['dimensions'] : "1170x370";
    	$instanceMaster = $this->entityManager->getRepository('OfficeBrainAccessManagementBundle:InstanceMaster')->find($instanceId);
    	
    	$record = $this->bannerMasterRepo->getBannerType($instanceId,$instanceMaster->getInstanceType(),$bannerTypeName,$bannerTypeCategory,$bannerDimensions);
    	if(empty($record))
    	{
	    	$bannerMaster = new BannerMaster();
	    	$bannerMaster->setBannerTypeName($bannerTypeName);
	    	$bannerMaster->setBannerCategory($bannerTypeCategory);
	    	$bannerMaster->setSlug(null);
	    	$bannerMaster->setKeywords(null);
	    	$bannerMaster->setCategoryId($bannerTypeCategoryId);
	    	$bannerMaster->setProductId(null);
	    	$bannerMaster->setWhereToShow(null);
	    	$bannerMaster->setBannerDimensions($bannerDimensions);
	    	$bannerMaster->setImageSize(null);
	    	$bannerMaster->setStatus(1);
	    	$bannerMaster->setCreatedUid($this->projectSetting['user_id']);
	    	$bannerMaster->setUpdatedUid($this->projectSetting['user_id']);
	    	$bannerMaster->setCreatedAt(new \DateTime());
	    	$bannerMaster->setUpdatedAt(new \DateTime());
	    	$bannerMaster->setInstanceId($instanceId);
	    	$bannerMaster->setInstanceType($instanceMaster->getInstanceType());
	    	
	    	$this->bannerMasterRepo->set($bannerMaster);
	    	return $returnBannerTypeId = $bannerMaster->getId();
    	}else {
    		return $returnBannerTypeId;
    	}
    	
    	
    }
    
    public function changeStatus($id)
    {
    	return $this->bannerMasterRepo->changeStatus($id);
    }
}
