<?php

namespace OfficeBrain\CustomBundle\CmsBundle\Manager\Extended;

use OfficeBrain\CustomBundle\CmsBundle\Manager\AbstractManager\CmsFlashMessageAbstract as CmsFlashMessageAbstract;
use OfficeBrain\CustomBundle\CmsBundle\Entity\CmsFlashMessageMaster;

class CmsFlashMessageExtended extends CmsFlashMessageAbstract
{
    public function __construct($entityManager, $request, $paginatorManager, $countries, $languages, $translator)
    {
        parent::__construct($entityManager, $request, $paginatorManager, $countries, $languages, $translator);
    }

    public function __destruct()
    {
        parent::__destruct();
    }
    
    /**
     * @author Employee Id: 5051
     * Description : Get blank object of master entity
     *
     * @return object
     * */
    
    public function getCmsFlashMessageMasterWithLanguage()
    {
    	$cmsFlashMessageMaster = new CmsFlashMessageMaster();
    	foreach ($this->languages as $key => $value) {
    		$cmsFlashMessageMaster->setLanguageId($value['id']);
    	}
    	return $cmsFlashMessageMaster;
    }
    
    /**
     * @author Employee Id: 5051
     * Description : Filter form data
     * @return object
     * */
    
    public function filterFormData($form)
    {
    	$cmsFlashMessageMaster = $form->getData();
    	$data = array();
    	$countryId = $cmsFlashMessageMaster->getCountryId();
    	if ($countryId) {
    		//$countryCode = $this->getCountryField($countryId, 'id', 'code');
    		if ($cmsFlashMessageMaster->getFlashMessageContent() == '') {
    			$form->get('flashMessageContent')->addError(new \Symfony\Component\Form\FormError($this->translator->trans('cms.admin.form.flash_message.label.required')));
    		}
    	}
    	return $form;
    }
    
    /**
     * @author Employee Id: 5051
     * Description : Get country field
     * */
    public function getCountryField($culture, $searchField, $returnField)
    {
    	foreach ($this->countries as $key => $country) {
    		if ($culture == $country[$searchField]) {
    			if ($returnField != 'code') {
    				return $country[$returnField];
    			} else {
    				return $key;
    			}
    		}
    	}
    }
    
    /**
     * @author Employee Id: 5051
     * Description : Save page data to database
     *
     * @return object
     * */
    
    public function setCmsFlashMessage($cmsFlashMessageMaster, $mode='')
    {
    	$cmsFlashMessageMasterId = $cmsFlashMessageMaster->getId();
    	$countryId = $cmsFlashMessageMaster->getCountryId();
    	if ($cmsFlashMessageMasterId == '') {
    		$cmsFlashMessageMaster->setCreatedUid($this->projectSetting['user_id']);
    		$cmsFlashMessageMaster->setInstanceId($this->projectSetting['instance_id']);
    		$cmsFlashMessageMaster->setInstanceType($this->projectSetting['instance_type']);
    		$cmsFlashMessageMaster->setCreatedAt(new \DateTime());
    	}
    	$cmsFlashMessageMaster = $this->cmsFlashMessageMasterRepository->setCmsFlashMessage($cmsFlashMessageMaster);
    	return $cmsFlashMessageMaster;
    }
    
    /**
     * @author Employee Id: 5051
     * Description : get all pages
     *
     * @return object
     * */
    public function getCmsFlashMessageList()
    {
    	$data = array();
    	$data['flag'] = 0;
    	$countryId = $this->request->get('countryId');
    	if ($countryId == '') {
    		$countryId = $this->countryId;
    	}
    	$cmsFlashMessageMasters = $this->cmsFlashMessageMasterRepository->findByCountryId($countryId);
    	if (count($cmsFlashMessageMasters) > 0) {
    		$data['flag'] = 1;
    		$data['pagination'] = $this->paginatorManager->paginate($cmsFlashMessageMasters, $this->request->get('page'), $this->recordsPerPage, array(), count($cmsFlashMessageMasters));
    	}
    	$data['records_per_page'] = $this->recordsPerPage;
    	$data['page'] = $this->request->get('page');
    	$data['countryId'] = $countryId;
    	return $data;
    }
    
    /**
     * @author Employee Id: 5051
     * Description : Change Cms Flash Message Status
     *
     * @return object
     * */
    public function changeStatus($id)
    {
    	return $this->cmsFlashMessageMasterRepository->changeStatus($id);
    }
    
    /**
     * @author Employee Id: 5051
     * Description : Find flash message of object
     *
     * @return object
     * */
    public function getCmsFlashMessageById($id = 0)
    {
    	if ($id == 0) {
    		$id = $this->request->get('id');
    	}
    	return $this->cmsFlashMessageMasterRepository->find($id);
    }
    
    /**
     * @author Employee Id: 5051
     * Description : Update flash message data to database
     *
     * @return object
     * */
    public function updateFlashMessage($cmsFlashMessageMaster)
    {
    	$cmsFlashMessageMaster->setUpdatedUid($this->projectSetting['user_id']);
    	$cmsFlashMessageMaster->setUpdatedAt(new \DateTime());
    	return $this->setCmsFlashMessage($cmsFlashMessageMaster, "edit");
    }

    /**
     * @author Employee Id: 5051
     * Description : Soft delete of flash message
     *
     * @return object
     * */
    public function deleteCmsFlashMessage()
    {
    	$pageObj = $this->cmsFlashMessageMasterRepository->find($this->request->get('id'));
    	if (is_object($pageObj)) {
    		$pageObj->setDeletedAt(new \DateTime());
    		$pageObj->setDeletedUid($this->projectSetting['user_id']);
    		return $this->cmsFlashMessageMasterRepository->setCmsFlashMessage($pageObj);
    	}
    }
    
    public function searchCmsFlashMessage()
    {
    	$data = array();
    	$countryId = $this->request->get('countryId');
    	$option = $this->request->get('option');
    	$keyword = $this->request->get('keyword');
    	$cmsFlashMessageMasters = $this->cmsFlashMessageMasterRepository->findByOption($countryId, $option, $keyword);
    	if (count($cmsFlashMessageMasters) > 0) {
    		$data['pagination'] = $this->paginatorManager->paginate($cmsFlashMessageMasters, $this->request->get('page'), $this->recordsPerPage, array(), count($cmsFlashMessageMasters));
    	}
    	$data['records_per_page'] = $this->recordsPerPage;
    	$data['page'] = $this->request->get('page');
    	$data['countryId'] = $countryId;
    	return $data;
    }
    
    public function getCmsFlashMessage()
    {
    	$data = array();
    	$cmsFlashMessageMaster = $this->cmsFlashMessageMasterRepository->getCmsFlashMessage($this->countryId, $this->languageId);
    	if (empty($cmsFlashMessageMaster)) {
    		$data['error'] = "MESSAGE_NOT_FOUND";
    	} else {
    		$data = $cmsFlashMessageMaster[0];
    	}
    	return $data;
    }
}
