<?php

namespace OfficeBrain\Bundle\SubShopBundle\Manager\Extended;

use OfficeBrain\Bundle\SubShopBundle\Manager\AbstractManager\SubShopInquiryAbstract as SubShopInquiryAbstract;
use OfficeBrain\Bundle\SubShopBundle\Entity\SubShop;

/**
 * @author OfficeBrain 4494 <info@officebrain.com>
 *
 * Description : Sub shop inquiry extexted class
 **/
class SubShopInquiryExtended extends SubShopInquiryAbstract
{
    public function __construct($entityManager, $request, $emailManager, $paginatorManager)
    {
        parent::__construct($entityManager, $request, $emailManager, $paginatorManager);
    }

    public function __destruct()
    {
        parent::__destruct();
    }

    /**
     * @author Employee Id: 4494
     * Description : Set subshop inquiry.
     *
     * @param 1 : Subshop inquiry object
     *
     * @return type : Inquiry id.
     *
     * @throws Exception: Null
     **/
    public function setSubShopInquiry($subshopInquiry, $sendMail = false)
    {
        $subshopInquiry->setCreatedUid($this->projectSetting['user_id']);
        $subshopInquiry->setInstanceId($this->projectSetting['instance_id']);
        $subshopInquiry->setInstanceType($this->projectSetting['instance_type']);
        $subshopInquiry->setUpdatedAt(new \DateTime());
        $subshopInquiry->setUpdatedUid($this->projectSetting['user_id']);

        $subshopInquiryId = $this->repository->set($subshopInquiry);

        if ($sendMail) {
            $this->sendAdminAcknowledgement($subshopInquiry);
            $this->sendUserAcknowledgement($subshopInquiry);
        }

        unset($subshopInquiry);

        return $subshopInquiryId;
    }

    /**
     * @author Employee Id: 4494
     * Description : Get Subshop Inquiry.
     *
     * @param 1 :  Inquiry Id
     *
     * @return type :Subshop Inquiry object.
     *
     * @throws Exception: Null.
     **/
    public function getSubShopInquiry($id)
    {
        $subshopInquiry = $this->repository->find($id);

        if (!$subshopInquiry) {
        }

        unset($id);

        return $subshopInquiry;
    }

    /**
     * @author Employee Id: 4494
     * Description : Get Subshop Inquiry List.
     *
     * @param 1 : No paramater
     *
     * @return type : Subshop Inquiry object list
     *
     * @throws Exception: Null
     **/
    public function getSubShopInquiryList()
    {
        $inquiryList = $this->repository->findAll();

        return $this->paginatorManager->paginate($inquiryList, $this->request->get('page'), $this->recordsPerPage, array(), count($inquiryList));
    }

    /**
     * @author Employee Id: 4494
     * Description : Delete Subshop Inquiry.
     *
     * @param 1 :  Inquiry Id
     *
     * @return type :Subshop Inquiry Id.
     *
     * @throws Exception: Null
     **/
    public function deleteSubShopInquiry()
    {
        $subshopInquiry = $this->getSubShopInquiry($this->request->get('id'));
        $subshopInquiry->setDeletedAt(new \DateTime());
        $subshopInquiry->setDeletedUid($this->projectSetting['user_id']);

        return $this->setSubShopInquiry($subshopInquiry);
    }

    /**
     * @author Employee Id: 4494
     * Description : Approve Subshop Inquiry.
     *
     * @param 1 :  Inquiry Id
     *
     * @return type :Subshop Inquiry Id.
     *
     * @throws Exception: Null
     **/
    public function approveSubShopInquiry($inquiryId = 0)
    {
        if ($inquiryId == 0) {
            $inquiryId = $this->request->get('id');
        }

        $subshopInquiry = $this->getSubShopInquiry($inquiryId);
        $subshopInquiry->setStatus('1');
        $subshopInquiry->setUpdatedAt(new \DateTime());
        $subshopInquiry->setUpdatedUid($this->projectSetting['user_id']);

        unset($inquiryId);

        return $this->setSubShopInquiry($subshopInquiry);
    }

    /**
     * @author Employee Id: 4494
     * Description : Reject Subshop Inquiry.
     *
     * @param 1 :  Inquiry Id
     *
     * @return type :Subshop Inquiry Id.
     *
     * @throws Exception: Null
     **/
    public function rejectSubShopInquiry()
    {
        $subshopInquiry = $this->getSubShopInquiry($this->request->get('id'));
        $subshopInquiry->setStatus('2');
        $subshopInquiry->setUpdatedAt(new \DateTime());
        $subshopInquiry->setUpdatedUid($this->projectSetting['user_id']);

        return $this->setSubShopInquiry($subshopInquiry);
    }

    /**
     * @author Employee Id: 4494
     * Description : OnHold Subshop Inquiry.
     *
     * @param 1 :  Inquiry Id
     *
     * @return type :Subshop Inquiry Id.
     *
     * @throws Exception: Null
     **/
    public function onHoldSubShopInquiry()
    {
        $subshopInquiry = $this->getSubShopInquiry($this->request->get('id'));
        $subshopInquiry->setStatus('0');
        $subshopInquiry->setUpdatedAt(new \DateTime());
        $subshopInquiry->setUpdatedUid($this->projectSetting['user_id']);

        return $this->setSubShopInquiry($subshopInquiry);
    }

    /**
     * @author Employee Id: 4494
     * Description : Search Subshop Inquiry by status.
     *
     * @param 1 :  Inquiry Status
     *
     * @return type :Subshop Inquiry Object.
     *
     * @throws Exception: Null.
     **/
    public function searchByStatusSubShopInquiry()
    {
        $statusId = $this->request->get('status_id');

        switch ($this->request->get('tab')) {
            case 'inquiry_list' :
                return $this->getSubShopInquiryList();
                break;

            case 'inquiry_approved_list' :
                $statusId = '1';
                break;

            case 'inquiry_rejected_list' :
                $statusId = '2';
                break;

            case 'inquiry_onhold_list' :
                $statusId = '0';
                break;

            case 'inquiry_deleted_list' :
                return $this->searchByDeleteSubShopInquiry();
                break;
        }

        $inquiryList = $this->repository->findByStatus($statusId);

        unset($statusId);

        return $this->paginatorManager->paginate($inquiryList, $this->request->get('page'), $this->recordsPerPage, array(), count($inquiryList));
    }

    /**
     * @author Employee Id: 4494.
     * Description : Search Subshop Inquiry by delete from Repository.
     *
     * @param 1 : No paramater
     *
     * @return type :Subshop Inquiry Object.
     *
     * @throws Exception: Null.
     **/
    public function searchByDeleteSubShopInquiry()
    {
        $inquiryList = $this->repository->findByDelete();

        return $this->paginatorManager->paginate($inquiryList, $this->request->get('page'), $this->recordsPerPage, array(), count($inquiryList));
    }

    /**
     * @author Employee Id: 4494.
     * Description : Search Subshop Inquiry.
     *
     * @param 1 : No paramater
     *
     * @return type :Subshop Inquiry Object.
     *
     * @throws Exception: Null.
     **/
    public function searchSubShopInquiry()
    {
        $statusId = null;
        $tabStatus = array('inquiry_onhold_list' => 0, 'inquiry_approved_list' => 1, 'inquiry_rejected_list' => 2);

        if (isset($tabStatus[$this->request->get('tab')])) {
            $statusId = $tabStatus[$this->request->get('tab')];
        }

        $inquiryList = $this->repository->findByOption($this->request->get('option'), $this->request->get('keyword'), $statusId);

        unset($statusId);
        unset($tabStatus);

        return $this->paginatorManager->paginate($inquiryList, $this->request->get('page'), $this->recordsPerPage, array(), count($inquiryList));
    }

    /**
     * @author Employee Id: 4494.
     * Description : Set Subshop from Inquiry.
     *
     * @param 1 : Subshop Inquiry
     *
     * @return type :Subshop Object.
     *
     * @throws Exception: Null.
     **/
    public function setSubShopFromInquiry()
    {
        $subShopInquiry = $this->getSubShopInquiry($this->request->get('inquiry_id'));

        if ($subShopInquiry->getStatus() != '') {
            $subShop['error'] = 'ERROR_INQUIRY_ALREADY_APPROVED';
        } else {
            $subShop = new SubShop();
            $subShop->setShopName($subShopInquiry->getCompanyName());
            $subShop->setCompanyName($subShopInquiry->getCompanyName());
            $subShop->setAdminEmail($subShopInquiry->getEmail());

            $inquiryUser = $this->entityManager->getRepository('OfficeBrainUserBundle:User')->findByEmail($subShopInquiry->getEmail());

            if ($inquiryUser) {
                $subShop->setSiteOwner($inquiryUser[0]->getId());
            }

            unset($inquiryUser);
        }

        unset($subShopInquiry);

        return $subShop;
    }

    public function sendRejectAcknowledgement()
    {
        $inquiry = $this->getSubShopInquiry($this->request->get('id'));

        $this->emailManager->sendMail('subshop_inquiry_reject_acknowledgement', $inquiry->getEmail(), array('id' => $this->request->get('id'), 'comment' => $this->request->get('comment')));

        unset($inquiry);

        return $this->rejectSubShopInquiry();
    }

    public function sendAdminAcknowledgement($inquiry)
    {
        $params = array(
                'id' => $inquiry->getId(),
                'firstname' => $inquiry->getFirstName(),
                'lastname' => $inquiry->getLastName(),
                'companyname' => $inquiry->getCompanyName(),
                'industrytype' => $inquiry->getIndustryType(),
                'projectannualbudget' => $inquiry->getAnnualBudget(),
                'noofemployee' => $inquiry->getEmployeeLength(),
                'envisionedofproduct' => $inquiry->getProductRange(),
                'storeapplication' => $inquiry->getShopType(),
                'address1' => $inquiry->getAddressLine1(),
                'address2' => $inquiry->getAddressLine2(),
                'city' => $inquiry->getCity(),
                'state' => $inquiry->getState(),
                'zipcode' => $inquiry->getZipCode(),
                'phoneno' => $inquiry->getPhone(),
                'faxno' => $inquiry->getFax(),
                'email' => $inquiry->getEmail(),
                'hascompanystore' => (($inquiry->getHasShop()== 1))? 'Yes':'No',
                'anticipatedrollout' => $inquiry->getAnticipateShopRollOut(),
                'comments' => $inquiry->getComments(),
        );

        $this->emailManager->sendMail('subshop_inquiry_admin_acknowledgement', '', $params);

        unset($params);
    }

    public function sendUserAcknowledgement($inquiry)
    {
        $params = array(
                'id' => $inquiry->getId(),
                'company' => $inquiry->getCompanyName(),
                'name' => $inquiry->getFirstName().' '.$inquiry->getLastName(),
                'email' => $inquiry->getEmail(),
                'address' => $inquiry->getAddressLine1().' '.$inquiry->getAddressLine2(),
                'phone' => $inquiry->getPhone(),
        );

        $this->emailManager->sendMail('subshop_inquiry_user_acknowledgement', $inquiry->getEmail(), $params);

        unset($params);
    }
    
    /* public function getCustomLabel($metaKey,$pmsId,$cultureId)
    {
    	$subShopMetaObj = $this->subShopInstanceMetaRepo->findByMetaKey($metaKey);
    	$labelVal = "";
    	if(!empty($subShopMetaObj)){
    		$metaVal =  json_decode($subShopMetaObj->getMetaValue(), true);
    		if(array_key_exists($pmsId,$metaVal['custom_label'])){
    			$labelVal = $metaVal['custom_label'][$pmsId][$cultureId];
    		}
    	}
    
    	return $labelVal;
    } */
    
    public function setSubShopInstanceMetaKey($metaKey,$postData,$pmsId,$cultureIds)
    {
    	$subShopMetaObj = $this->subShopInstanceMetaRepo->findByMetaKey($metaKey);
    	$responseArray = array();
    	if(!empty($subShopMetaObj)){
    		$metaVal =  json_decode($subShopMetaObj->getMetaValue(), true);
    		if(array_key_exists($pmsId,$metaVal['custom_label'])){
    			$labelVal = $metaVal['custom_label'][$pmsId];
    			foreach ($cultureIds as $key=>$val){
    				if(!empty($postData[$key]['custom_label'])){
    					$labelVal[$val['id']] = $postData[$key]['custom_label'];
    				}else{
    					unset($labelVal[$val['id']]);
    				}
    			}
    			$metaVal['custom_label'][$pmsId] = $labelVal;
    		}else{
    			foreach ($cultureIds as $key=>$val){
    				if(!empty($postData[$key]['custom_label'])){
    					$metaVal['custom_label'][$pmsId][$val['id']] = $postData[$key]['custom_label'];
    				}
    			}
    		}
    		$returnMetaVal = json_encode($metaVal);
    		$subShopMetaObj->setMetaValue($returnMetaVal);
    		$this->subShopInstanceMetaRepo->set($subShopMetaObj);
    	}else{
    		foreach ($cultureIds as $key=>$val){
    			if(!empty($postData[$key]['custom_label'])){
    				$responseArray['custom_label'][$pmsId][$val['id']] = $postData[$key]['custom_label'];
    			}
    		}
    		$returnMetaVal = json_encode($responseArray);
    		$subShopMetaObj = $this->subShopInstanceMetaRepo->add($metaKey,$returnMetaVal);
    	}
    
    	return $subShopMetaObj;
    }
}
