<?php

namespace OfficeBrain\CustomBundle\CmsBundle\Manager\Extended;

use OfficeBrain\CustomBundle\CmsBundle\Manager\AbstractManager\OrderCatalogAbstract as OrderCatalogAbstract;
use OfficeBrain\CustomBundle\CmsBundle\Entity\OrderCatalog;
use OfficeBrain\CustomBundle\CmsBundle\Form\OrderCatalogType;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\JsonResponse;

class OrderCatalogExtended extends OrderCatalogAbstract
{
    public function __construct($container,$entityManager, $request, $emailManager, $paginatorManager)
    {
    	$this->stateRepo = $container->get('doctrine')->getRepository('OfficeBrainCoreBundle:State');
    	$this->countryRepo = $container->get('doctrine')->getRepository('OfficeBrainCoreBundle:Country');
        parent::__construct($container,$entityManager, $request, $emailManager, $paginatorManager);
    }

    public function __destruct()
    {
        parent::__destruct();
    }
    
    public function setOrderCatalog($orderCatalog) {
    	$orderCatalog->setUserId($this->projectSetting['user_id']);
    	$orderCatalog->setCreatedUid($this->projectSetting['user_id']);
    	$orderCatalog->setInstanceId($this->projectSetting['instance_id']);
    	$orderCatalog->setInstanceType($this->projectSetting['instance_type']);
    	$orderCatalog->setCreatedAt(new \DateTime());
    	$orderCatalog->setUpdatedAt(new \DateTime());
    	$orderCatalog->setUpdatedUid($this->projectSetting['user_id']);
    	$sendEmailToAdminResponse = $this->sendOrderCatelogEmail($orderCatalog);
    	return $this->orderCatalogRepository->set($orderCatalog);
    }
    
    /**
     * @author Employee Id: 4242
     *
     * Description : This function is used to get list of all order catalog
     *
     * @param : $file object
     *
     * @return boolean
     *
     * @throws Exception : Null
     *
     **/
    public function getCmsOrderCatalogList()
    {
    	$data = array();
    
    	//$cmsUploadArtworkCenterList = $this->uploadArtworkCenterRepo->findAll();
    	$cmsOrderCatalogList = $this->orderCatalogRepository->getOrderList();
    	 
    	if (count($cmsOrderCatalogList) > 0) {
    		$data['pagination'] = $this->paginatorManager->paginate($cmsOrderCatalogList, $this->request->get('page'), $this->recordsPerPage, array(), count($cmsOrderCatalogList));
    	}
    
    	$data['records_per_page'] = $this->recordsPerPage;
    	$data['page'] = $this->request->get('page');
    
    	return $data;
    }
    
    
    /**
     * @author Employee Id: 4242
     *
     * Description : This function is used to get list of all order catalog after searching
     *
     * @param : $file object
     *
     * @return boolean
     *
     * @throws Exception : Null
     *
     **/
    public function searchCmsOrderCatalogList()
    {
    	$data = array();
    	$option = $this->request->get('option');
    	$keyword = $this->request->get('keyword');
    
    	$cmsOrderCatalogList = $this->orderCatalogRepository->findByOption($option, $keyword);
    
    	if (count($cmsOrderCatalogList) > 0) {
    		$data['pagination'] = $this->paginatorManager->paginate($cmsOrderCatalogList, $this->request->get('page'), $this->recordsPerPage, array(), count($cmsOrderCatalogList));
    	}
    
    	$data['records_per_page'] = $this->recordsPerPage;
    	$data['page'] = $this->request->get('page');
    
    	return $data;
    }
    

    /**
     * @author Employee Id: 4242
     *
     * Description : Soft delete requested order catalog
     *
     * @param 1 : order Request  id
     *
     * @return type : Null
     *
     * @throws Exception: Null
     */
    public function deleteOrderCatalogId($id)
    {
    	$inventObj = $this->orderCatalogRepository->find($id);
    	/* if (!is_object($eventObj->getTemplate())) {
    	 $eventObj->setDeletedAt(new \DateTime());
    	 $this->commit($eventObj);
    	 $this->session->getFlashBag()->add('success_message', $this->translator->trans('email.event.message.delete_success'));
    	 } else {
    	 $this->session->getFlashBag()->add('error_message', $this->translator->trans('email.event.message.delete_error1'));
    	 } */
    
    	$currentDateTime = new \DateTime();
    
    	$inventObj->setDeletedAt($currentDateTime);
    	$inventObj->setDeletedUid($this->deletedUid);
    	$this->commit($inventObj);
    	$this->session->getFlashBag()->add('success_message', $this->translator->trans('cms.admin.list.order_catalog.delete_message'));
    	//unset variable
    	unset($inventObj);
    	unset($currentDateTime);
    }
    
    /**
     * @author Employee Id: 4242
     *
     * Description : This function is used to get detali of  order request using id
     *
     * 
     *
     * @return boolean
     *
     * @throws Exception : Null
     *
     **/
    public function getCmsOrderCatalogDetail($id)
    {  
    	$data = array();
    
    	$cmsOrderCatalogDetail = $this->orderCatalogRepository->findById($id);
        
    	$data['data'] = $cmsOrderCatalogDetail;
    
    	return $data;
    }
    
    public function sendOrderCatelogEmail($orderCatelogEntity)
    {
    	$eventKey = 'transaction_order_catelog';
    	$languageId = $this->languageId;
    	
    	$stateName = $this->stateRepo->getStateNameById($orderCatelogEntity->getStateId())[0]['stateName'];
    	$countryName = $this->countryRepo->getCountryNameById($orderCatelogEntity->getCountryId())[0]['countryName'];
    	
    	$params = array(
    		'catlogversion' => $orderCatelogEntity->getCatalogVersion(),
    		'totalorderofcatalog' => $orderCatelogEntity->getCatalogNumber(),
    		'shipperno' => $orderCatelogEntity->getShipperNo(),
    		'firstname' => $orderCatelogEntity->getFirstName(),
    		'lastname' => $orderCatelogEntity->getLastName(),
    		'companyname' => $orderCatelogEntity->getCompanyName(),
    		'street1' => $orderCatelogEntity->getStreet1(),
    		'street2' => $orderCatelogEntity->getStreet2(),
    		'cityName' => $orderCatelogEntity->getCityName(),
    			'countryName' => $countryName,
    			'stateName' => $stateName,
    			'zipcode' => $orderCatelogEntity->getZipcode(),
    		'emailaddress' => $orderCatelogEntity->getEmail(),
    		'phoneno' => $orderCatelogEntity->getPhone(),
    	);
    	 
    	$from =  '';
    	$to = '';
    	$subject = '';
    	 
    	
    	 
    	$cc = ''; // array();
    	$bcc = ''; // array();
    
    	$this->emailManager->sendMail($eventKey, $to, $params, $languageId, $from, $subject, $cc, $bcc);
    
    	return true;
    }
}
