<?php

namespace OfficeBrain\Bundle\FeedBackBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use OfficeBrain\Bundle\FeedBackBundle\Entity\SiteFeedBack;
use OfficeBrain\Bundle\FeedBackBundle\Form\SiteFeedBackType;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Symfony\Component\HttpFoundation\JsonResponse;
use OfficeBrain\Bundle\CoreBundle\CustomeHandler as FormErrorManager;


class SiteFeedBackController extends Controller
{
	/**
	 *
	 * @author Employee Id: 4493
	 *	set default value
	 *
	 * @return NULL
	 */
	public function __construct()
	{
		$this->request = null;
		$this->locale = null;
		$this->form = null;
		$this->formErrorManager = new FormErrorManager\JsonError();
	}

	/**
	 *
	 * @author Employee Id: 4493
	 *		 To unset value
	 *
	 * @return NULL
	 */
	public function __destruct()
	{
		unset($this->request);
		unset($this->locale);
		unset($this->form);
		unset($this->formErrorManager) ;
	}


	private function prepareFormJsonError()
	{
		return array(
				'form_name' => $this->form->getName(),
				'form_status' => 'error',
				'form_errors' => $this->formErrorManager->prepareErrorArray($this->get('validator')->validate($this->form))
		);
	}

	/**
	 *
	 * @author Employee Id: 4493
	 *		Create objects which use this class
	 *
	 * @return NULL
	 */
	public function initAction()
	{
		$this->request = $this->getRequest();
		$this->responseArray['status'] = 'error';
		$this->translator = $this->get('translator');
		$this->projectSetting = $this->request->get('project_setting');
		$this->locale = $this->projectSetting['locale_language'];
		$this->siteFeedBackManager = $this->get('office_brain_site_feedback_manager');
		$this->siteFeedBackCategory = $this->siteFeedBackManager->getSiteFeedBackCategory();
		$this->responseArray['siteFeedBackCategory'] = $this->siteFeedBackCategory;

	}

	/**
	 * @author Employee Id: 4493
	 * OB eCommerce Product - site feedback
	 *
	 * @Route("{_locale}/site-feedback",
	 * 	name="office_brain_feedbackbundle_sitefeedback_addsitefeedback",
	 *  options={"expose"=true}
	 * )
	 * @Method({"GET"})
	 * @Template("OfficeBrainFeedBackBundle:SiteFeedBack:siteFeedBack.html.twig")
	 */

	public function addSiteFeedBackAction()
	{
		$this->initAction();
		$this->form = $this->createForm(new SiteFeedBackType($this->siteFeedBackCategory), new SiteFeedBack());
		$this->form->handleRequest($this->request);
		$this->responseArray['form'] = $this->form->createView();
		return  $this->responseArray;
	}



	/**
	 * @author Employee Id: 4493
	 * OB eCommerce Product -  site feedback
	 *
	 * @Route("{_locale}/site-feedback",
	 * 	name="office_brain_feedbackbundle_sitefeedback_addsitefeedbackpost",
	 *  options={"expose"=true}
	 * )
	 * @Method({"POST"})
	 * @Template("OfficeBrainFeedBackBundle:SiteFeedBack:siteFeedBack.html.twig")
	 */

	public function addSiteFeedBackPostAction()
	{
		$this->initAction();
		$this->form = $this->createForm(new SiteFeedBackType($this->siteFeedBackCategory), new SiteFeedBack());
		$this->form->handleRequest($this->request);
		if ($this->form->isValid()) {
			$siteFeedBackData = $this->form->getData();
			$this->responseArray['add'] = $this->siteFeedBackManager->addSiteFeedBack($siteFeedBackData);

			switch ($this->responseArray['add']['status']) {
				case  'SUCCESS' :
					$this->siteFeedBackManager->sendSiteFeedBackEmail($this->form);
					$this->responseArray['status'] = 'success';
					$this->responseArray['feedback_page'] = 'siteFeedBack';
					$this->responseArray['success_message'] = $this->translator->trans('feedback.site_feedback.success_message');
					return new JsonResponse($this->responseArray);
					break;
				case  'FAIL':
					$this->responseArray['status'] = 'error';
					$this->responseArray['error_message'] = $this->translator->trans('feedback.site_feedback.fail_message');
					break;
			}
			return $this->redirect($this->generateUrl("office_brain_feedbackbundle_sitefeedback_addsitefeedback"));
		}else{
			return new JsonResponse ( $this->prepareFormJsonError ($this->form) );
		}
		$this->responseArray['form'] = $this->form->createView();
		return $this->responseArray;
	}


}
