<?php

namespace OfficeBrain\Bundle\CmsBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\JsonResponse;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use OfficeBrain\Bundle\CmsBundle\Form\CmsSearchCriteriaType;

/**
 * @author Employee Id: 4589
 *
 * Description : Controller class for media library
 *
 * @Route("/admin/{_locale}/cms/search-criteria")
 */
class CmsSearchCriteriaAdminController extends Controller
{
    private $request;

    private $session;

    private $translator;

    private $projectSetting;

    private $cmsSearchCriteriaManager;

    private $responseArray;

    public function __construct()
    {
        $this->request = null;
        $this->session = null;
        $this->translator = null;
        $this->projectSetting = array();
        $this->cmsSearchCriteriaManager = null;
        $this->responseArray = array();
    }

    public function __destruct()
    {
        unset($this->request);
        unset($this->session);
        unset($this->translator);
        unset($this->projectSetting);
        unset($this->cmsSearchCriteriaManager);
        unset($this->responseArray);
    }

    public function initAction()
    {
        $this->request = $this->getRequest();
        $this->session = $this->request->getSession();
        $this->translator = $this->get('translator');
        $this->projectSetting = $this->request->get('project_setting');
        $this->cmsSearchCriteriaManager = $this->get('office_brain_cms_search_criteria_manager');
        $this->responseArray = array();
    }

    /**
     * @author Employee Id: 4589
     *
     * Description : This function is used to list all search criteria
     *
     * @param : Country Id
     *
     * @return NULL
     *
     * @throws Exception: Null
     *
     * @Route("/list/{countryId}", name="office_brain_cmsbundle_searchcriteriaadmin_listbycountry")
     * @Route("/list", name="office_brain_cmsbundle_searchcriteriaadmin_list")
     * @Template("OfficeBrainCmsBundle:CmsSearchCriteriaAdmin:list.html.twig")
     */
    public function listAction()
    {
        $this->initAction();

        $this->responseArray = $this->cmsSearchCriteriaManager->getSearchCriteriaList();

        return $this->responseArray;
    }

    /**
     * @author Employee Id: 4589
     *
     * Description : This function is used to list all search criteria using ajax
     *
     * @param : Null
     *
     * @return NULL
     *
     * @throws Exception: Null
     *
     * @Route("/list-ajax/{countryId}", name="office_brain_cmsbundle_searchcriteriaadmin_listajax")
     * * @Route("/list-ajax", name="office_brain_cmsbundle_searchcriteriaadmin_listajax")
     * @Template("OfficeBrainCmsBundle:CmsSearchCriteriaAdmin:listAjax.html.twig")
     */
    public function listAjaxAction()
    {
        $this->initAction();

        $this->responseArray = $this->cmsSearchCriteriaManager->getSearchCriteriaList();

        return $this->responseArray;
    }

    /**
     * @author Employee Id: 4589
     *
     * Description : This function is used to ajax base search criteria
     *
     * @param : Null
     *
     * @return NULL
     *
     * @throws Exception: Null
     *
     * @Route("/search", name="office_brain_cmsbundle_searchcriteriaadmin_search")
     * @Template("OfficeBrainCmsBundle:CmsSearchCriteriaAdmin:listAjax.html.twig")
     */
    public function searchAction()
    {
        $this->initAction();

        $this->responseArray = $this->cmsSearchCriteriaManager->searchSearchCriteria();

        return $this->responseArray;
    }

    /**
     * @author Employee Id: 4589
     *
     * Description : This function is used to add search criteria
     *
     * @param : Null
     *
     * @return NULL
     *
     * @throws Exception: Null
     *
     * @Route("/add", name="office_brain_cmsbundle_searchcriteriaadmin_add")
     * @Method("GET")
     * @Template("OfficeBrainCmsBundle:CmsSearchCriteriaAdmin:add.html.twig")
     */
    public function addAction()
    {
        $this->initAction();

        $this->responseArray['form'] = $this->createForm(new CmsSearchCriteriaType($this->container, $this->cmsSearchCriteriaManager), $this->cmsSearchCriteriaManager->getSearchCriteriaWithLanguage())->createView();

        return $this->responseArray;
    }

    /**
     * @author Employee Id: 4589
     *
     * Description : This function is used to save search criteria
     *
     * @param : Null
     *
     * @return NULL
     *
     * @throws Exception: Null
     *
     * @Route("/add", name="office_brain_cmsbundle_searchcriteriaadmin_processadd")
     * @Method("POST")
     * @Template("OfficeBrainCmsBundle:CmsSearchCriteriaAdmin:add.html.twig")
     */
    public function processAddAction()
    {
        $this->initAction();

        $form = $this->createForm(new CmsSearchCriteriaType($this->container, $this->cmsSearchCriteriaManager), $this->cmsSearchCriteriaManager->getSearchCriteriaWithLanguage());

        $form->handleRequest($this->request);

        $form = $this->cmsSearchCriteriaManager->filterFormData($form);

        if ($form->isValid()) {
            $this->cmsSearchCriteriaManager->setSearchCriteria($form->getData());

            $this->session->getFlashBag()->set('success_message', $this->translator->trans('cms.search_criteria.admin.action.add_success'));

            return $this->redirect($this->generateUrl('office_brain_cmsbundle_searchcriteriaadmin_list'));
        }

        $this->responseArray['form'] = $form->createView();

        //unset variable
        unset($form);

        return $this->responseArray;
    }

    /**
     * @author Employee Id: 4589
     * Description : Display page form.
     *
     * @param 1 : No paramater
     *
     * @return type : Form view.
     *
     * @throws Exception: Null
     *
     * @Route("/edit/{id}", name="office_brain_cmsbundle_searchcriteriaadmin_edit")
     * @Method("GET")
     * @Template("OfficeBrainCmsBundle:CmsSearchCriteriaAdmin:edit.html.twig")
     */
    public function editAction()
    {
        $this->initAction();

        $this->responseArray['form'] = $this->createForm(new CmsSearchCriteriaType($this->container, $this->cmsSearchCriteriaManager), $this->cmsSearchCriteriaManager->getSearchCriteriaById())->createView();

        return $this->responseArray;
    }

    /**
     * @author Employee Id: 4589
     * Description : save form data
     *
     * @param 1 : No paramater
     *
     * @return type : Form view.
     *
     * @throws Exception: Null
     *
     * @Route("/edit/{id}", name="office_brain_cmsbundle_searchcriteriaadmin_processedit")
     * @Method("POST")
     * @Template("OfficeBrainCmsBundle:CmsSearchCriteriaAdmin:edit.html.twig")
     */
    public function processEditAction()
    {
        $this->initAction();

        $form = $this->createForm(new CmsSearchCriteriaType($this->container, $this->cmsSearchCriteriaManager), $this->cmsSearchCriteriaManager->getSearchCriteriaById());

        $form->handleRequest($this->request);

        if ($form->isValid()) {
            $this->cmsSearchCriteriaManager->updateSearchCriteria($form->getData());

            $this->session->getFlashBag()->set('success_message', $this->translator->trans('cms.search_criteria.admin.action.update_success'));

            return $this->redirect($this->generateUrl('office_brain_cmsbundle_searchcriteriaadmin_list'));
        }

        $this->responseArray['form'] = $form->createView();

        return $this->responseArray;
    }

    /**
     * @author Employee Id: 4589
     *
     * Description : Delete search criteria.
     *
     * @param : Null
     *
     * @return NULL
     *
     * @throws Exception: Null
     *
     * @Route("/delete/{id}", name="office_brain_cmsbundle_searchcriteriaadmin_delete")
     * @Method("GET")
     */
    public function deleteAction()
    {
        $this->initAction();

        $this->cmsSearchCriteriaManager->deleteSearchCriteria();

        $this->session->getFlashBag()->add('success_message', $this->translator->trans('cms.search_criteria.admin.action.delete_success'));

        return $this->redirect($this->generateUrl('office_brain_cmsbundle_searchcriteriaadmin_list'));
    }
    
    /**
     * @author Employee Id: 5190
     *
     * Description : Ajax base search criteria change status
     *
     * @Route("/change-status/{instance_id}", name="office_brain_cmsbundle_searchcriteriaadmin_change_status",
     * requirements={"instance_id"="\d+"},
     * options={"expose"=true},
     * defaults={"instance_id"="0"})
     *
     * @Method("POST")
     * @Template()
     */
    public function searchCriteriaChangeStatusAction()
    {
    	$this->initAction();
    	$id = $this->request->get('id');
    	 
    	if ($id) {
    		$status = $this->cmsSearchCriteriaManager->changeStatus($id);
    		if ($status) {
    			return new JsonResponse(array('status' => 'success', 'status_message' => $this->translator->trans('cms.search_criteria.admin.status_message_success')));
    		}
    	}
    	return new JsonResponse(array('status' => 'fail', 'status_message' => $this->translator->trans('cms.search_criteria.admin.status_message_fail')));
    }
    
}
