<?php

namespace OfficeBrain\Bundle\ProductTagBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Translation\Translator;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use OfficeBrain\Bundle\ProductTagBundle\Entity\PrivateTagProductMapping;
use OfficeBrain\Bundle\ProductTagBundle\Form\PrivateTagMasterType;
use OfficeBrain\Bundle\SearchBundle\Form\Type\ProductSearchType;
use OfficeBrain\Bundle\SearchBundle\Form\Data\ProductSearchData;
use Nelmio\ApiDocBundle\Annotation\ApiDoc;

/**
 * @author OfficeBrain 410175 <info@officebrain.com>
 * Description : Private Tag Controller For Mobile API
 *
 * @Route("/api/v1/{_locale}", defaults={"_format" = "json"})
 */
class ApiProductTagController extends ProductTagController
{
	const SUCCESS = 'success';
	const ERROR = 'error';
	const SUCCESS_CODE = 1;
	const ERROR_CODE = 0;
	
    public function __construct()
    {
    	parent::__construct();
    	$this->responseFormat = null;      
    }

    public function __destruct()
    {
    	parent::__destruct();
        unset($this->responseFormat);
    }

    public function initAction()
    {
    	parent::initAction();
        $this->responseFormat = $this->request->get('_format', null) ;
        $this->userId = $this->projectSetting['user_id'];
        $this->wishListManager = $this->get('office_brain_wish_list_manager');
    }
    
    
    /**
     * @author Employee Id: 4045
     * Description : Listing of Product Tag.
     * @param : null
     *
     * @Route("/private-tags-list", name="office_brain_pagebundle_privatetag_list_api",
     * defaults={"tag_type"="private","records_per_page"=8,"page"=1,"language"="en"})
     * 
     * @ApiDoc(
	 *      resource=true,
	 *      section="Product Tag",
	 *      description="Get Private|Public Product Tag List",
	 *      requirements = {
	 * 			   {"name"="_locale", "dataType"="string", "required"=true, "default"="en_us"},
     *             {"name"="access_token", "dataType"="string", "required"=true, "description"="valid access token"},
     *             {"name"="instance_id", "dataType"="integer", "required"=true, "description"="valid instance_id"},
     *             {"name"="instance_type", "dataType"="string", "required"=true, "description"="valid instance_type"},
     *             {"name"="cat", "dataType"="string", "required"=false, "description"=""},
     *             {"name"="show_title", "dataType"="string", "required"=false, "description"=""},
     *             {"name"="tag_type", "dataType"="string", "required"=false, "description"="private|public"},
     *             {"name"="language", "dataType"="string", "required"=false, "description"="valid language like 'en'"},
	 *      },
	 *      statusCodes={
	 *              1="Returned when success",
	 *              403="Returned when the user is not authorized to see this link",
	 *              0="Returned when form validation is failed",
	 *      }
	 * )
     *
     * @Template()
     * @Method("GET")
     */
    public function listPrivateTagsAction()
    {
    	$this->initAction();
    
    	$data = $this->productTagManager->setPaggingParameters($this->countryMaster);
    	$data['page_paramater']['status'] = 1;
    	$data['page_paramater']['current_date'] = true;
    	$data['page_paramater']['event_category_id'] = $this->request->get("cat",null);
    	 
    	$tmpProductTagMasterList = $this->productTagManager->getList($data['page_paramater']);
    
    	$data['tags']= $productTagMasterList;
    	$showTitle = $this->request->get("show_title",1);
    	 
    	
    	$productTagMasterList = null;
    	if( $tmpProductTagMasterList && count($tmpProductTagMasterList) > 0 ){    		
    		foreach ( $tmpProductTagMasterList as $tagPrdData ){
    			$tmpProdData = array();
    			$tmpProdData['featuredIcon'] = $this->featuredIconUrl.$tagPrdData['featuredIcon'];
    			$tmpProdData['id'] = $tagPrdData['id'];
    			$tmpProdData['tagIcon'] = $tagPrdData['tagIcon'];
    			$tmpProdData['tagName'] = $tagPrdData['tagName'];
    			$tmpProdData['slug'] = $tagPrdData['slug'];
    			$tmpProdData['tagDescription'] = $tagPrdData['tagDescription'];
    			
    		 	$productTagMasterList[] = $tmpProdData;
    		}
    	}
    	
    	return array(
    			'status' => self::SUCCESS,
    			'status_code' => self::SUCCESS_CODE,
    			'response_data' => $productTagMasterList,
    	);
    	
    }
    
    /**
     * @author Employee Id: 4045
     * Description : List of mapped products
     *
     * @param 1 : $id
     *
     * @return type Array
     *
     * @throws Exception: Null
     *
     * @Route("/mapped-product-list/{id}", name="office_brain_producttagbundle_privatetag_mappedproductlist_api",
     * defaults={"tag_type"="private","records_per_page"=8,"page"=1,"type"="sku"})
     * 
     * @ApiDoc(
     *      resource=true,
     *      section="Product Tag",
     *      description="Get Product Data by Tag",
     *      requirements={
     *      	{"name"="_locale", "dataType"="string", "required"=true, "default"="en_us"},
     *          {"name"="access_token", "dataType"="string", "required"=true, "description"="valid access token"},
     *          {"name"="instance_id", "dataType"="integer", "required"=true, "description"="valid instance_id"},
     *          {"name"="instance_type", "dataType"="string", "required"=true, "description"="valid instance_type"},
     *          {"name"="id", "dataType"="integer", "required"=true, "description"="valid tagId"},
     *          {"name"="tag_type", "dataType"="string", "required"=false, "description"="private|public(default:private)"},
     *          {"name"="type", "dataType"="string", "required"=false, "description"="default: sku"},      
     *      }, 
     *      statusCodes={
     *              1="Returned when success",
     *              403="Returned when the user is not authorized to see this link",
     *              0="Returned when form validation is failed",
     *      }
     * )
     *
     * @Template()
     * @Method("GET")
     */
    public function privateMappedProductListAction($id)
    {
    	$this->initAction();
    
    	$data = $this->generatePrivateMappedArray($id);
    	
    	/*$this->arrayToPaginationManager->setPaginationArray($data);
    	$this->arrayToPaginationManager->doConvert();
    	$data['pagination'] = $this->arrayToPaginationManager->getPagination();    	
    	$newData['data'] = $data['pagination'] ->getItems();    
    	$newData['pagination'] = $data['pagination'] ->getPaginationData();*/
    	
    	$newData = null;
    	$newData['data'] = $data['data'];
    	$newData['tag_name'] = $data['tag_name'];
    	$newData['totalCount'] = $data['totalCount'];
    	
    	return array(
    			'status' => self::SUCCESS,
    			'status_code' => self::SUCCESS_CODE,
    			'response_data' => $newData,
    	);
    }   
   
}
