<?php

namespace OfficeBrain\CustomBundle\ProductBundle\Manager\Extended;

//use Symfony\Component\HttpFoundation\Request;
use OfficeBrain\CustomBundle\ProductBundle\Manager\AbstractManager\ProductAbstract;
// use Symfony\Component\DependencyInjection\ContainerInterface as Container;
// use Symfony\Component\HttpFoundation\Response;
// use Symfony\Component\HttpFoundation\Cookie;
use OfficeBrain\Bundle\ProductBundle\Manager\Extended\ProductApiExtended as BaseProductApiExtended;

//class ProductApiExtended extends ProductAbstract
class ProductApiExtended extends BaseProductApiExtended
{
    public function __construct($request, $productApi, $serviceContainer, $commonLibraryManager,  $entityManager, $searchManager,$skuMaskingManager)
    {
    	parent::__construct($request, $productApi, $serviceContainer, $commonLibraryManager, $entityManager);
    	
    	$this->searchManager = $searchManager;
    	$this->noOfRecord = $this->projectSetting['configuration_rule']['search']['product_detail']['recently_viewed_product']['option']['no_of_records'];
    	$this->relatedProductRepo = $this->serviceContainer->get('doctrine')->getRepository('OfficeBrainProductBundle:RelatedProduct');
        $this->skuMaskingManager = $skuMaskingManager;
    }
    
    /**
     * @author Employee Id: 4464
     * Description : To get similar products of the SKU from solr
     *
     * @param string $productSku
     *
     * @return array
     *
     * @throws Exception   
     *
     **/
    public function getSimilarSku($productSku)
    {
        $this->request->query->set('similar_sku',$productSku);
        return $this->searchManager->searchService();
    }  
    public function getCategoryIds($productId,$countryId)
    {
    	$categoryIds = array();
    	$categoryEntities = $this->productCategoryMappingRepository->getCategoryByProductId($productId,$countryId);
    	foreach($categoryEntities as $categoryEntity)
    	{
    		$categoryIds[] = $categoryEntity['categoryId'];
    	}
    	return $categoryIds;
    }
    public function productreletedid($productId)
    {
    	 
    	$productreletEntities = $this->relatedProductRepo->getreletedProductId($productId);
    	return $productreletEntities;
    }
    public function getCategoryMapping()
    {
    	$this->dbConnection = $this->entityManager->getConnection();
    	$query="SELECT c3.reference_id AS pms_id,(SELECT group_concat(reference_id) FROM tbl_cms_menu_item c4 WHERE c4.`parent_id`=c3.`id` and c4.deleted_at IS NULL and reference_id>0 ) AS haschildid from tbl_cms_menu_item c3 WHERE c3.deleted_at IS NULL and c3.parent_id=(select item_id from tbl_cms_menu_item_language where tbl_cms_menu_item_language.title='Products') and c3.item_type='category-product-list'";
    	$statement = $this->dbConnection->prepare($query);
    	$statement->execute();
    	$result = $statement->fetchAll();
    	return $result;
    }
        
    /**
     * @author Employee Id: 5633
     *
     * Description: This Function Used For change new sku
     *
     * @param array $requestParams
     *
     * @return array|multitype:string |multitype:string NULL
     */
    public function updateMaskingSkuNumber($productMasterData)
    {
        
    	$productArray = array();
    	$country = $this->serviceContainer->getParameter('country');
    	$currency = $country[@end(explode('_',$this->projectSetting['locale_language']))]['currency'];
        $locale = explode('_',$this->projectSetting['locale_language']);
    	if(isset($productMasterData) && !empty($productMasterData) && isset($country[end($locale)])){
            
    		if(isset($productMasterData['product_id'])) {
    			$productArray[] = $productMasterData;
    		} elseif(isset($productMasterData['products'])) {
    			$productArray = (array)$productMasterData['products'];
    		} else {
    			$productArray = (array)$productMasterData;
    		}
            
    		foreach($productArray as $productId=>$productData){
    
    			if(isset($productData['basic_information'])) {
    				
    				$check = $this->skuMaskingManager->getSkuFromMaskedSku($productData['basic_information']['sku_number'],$productData['supplier']['supplier_id']);
    				
    				if($check != "NOT_FOUND_IN_RESULT"){
    					$productData['basic_information']['original_sku_number'] = $check;
    				}else{
    					$productData['basic_information']['original_sku_number'] = $productData['basic_information']['sku_number'];
    				}
    				
    				$skuMasking = $this->skuMaskingManager->getMaskingBySkuAndSupplier($productData['basic_information']['sku_number'],$productData['supplier']['supplier_id']);
    				if(is_object($skuMasking)){
    					if(!empty($skuMasking->getMaskingSku())){
    						$productData['basic_information']['sku_number'] = $skuMasking->getMaskingSku();
    					}
    				}
    				
    				// $recordCount = $this->getProductDetailsBySKUAndSupplier($productData['basic_information']['sku_number'],$productData['supplier']['supplier_id']);
    				
    				/* if(empty($recordCount))
    				 {
    				$productData['is_deleted'] = true;
    				$productData['basic_information']['active'] = false;
    				} */
    				
    				/* if(empty($recordCount))
    				{
    					$productData['is_deleted_in_subshop'] = "";
    					$productData['basic_information']['active_in_subshop'] = "";
    				} */
    				
    			// 	$maskProduct = $this->skuMaskingManager->getMaskingByProduct($productData['product_id']);
    			// 	//######################## Done By 4203 ##################
    			// 	$productData['blank_pricing'] = false;
    			// 	if(array_key_exists('18757',$productData['imprint_information']['imprint_method_information'])){
    			// 		unset($productData['imprint_information']['imprint_method_information']['18757']);
    			// 	}
    			// 	if(isset($productData['imprint_position_and_methods']) && count($productData['imprint_position_and_methods'])>0){
    			// 		foreach($productData['imprint_position_and_methods'] as $locationId=>$locationData)
    			// 		{
    			// 			if(array_key_exists('18757',$locationData['imprint_method'])){
    			// 				unset($locationData['imprint_method']['18757']);
    			// 			}
    			// 			$productData['imprint_position_and_methods'][$locationId]['imprint_method']=$locationData['imprint_method'];
    			// 		}
    			// 	}
    			// 	if(array_key_exists('18757',$productData['imprint_methods'])){
    			// 		unset($productData['imprint_methods']['18757']);
    			// 	}
    			// 	if(array_key_exists('blank',$productData['pricing'])){
    			// 		unset($productData['pricing']['blank']);
    			// 	}
    			// 	if(isset($productData['attributes']))
    			// 	{ 
    			// 		foreach($productData['attributes'] as $attrkey=>$colorAttributes)
    			// 		{
    			// 			if($colorAttributes['id'] == 74)
    			// 			{
    			// 				unset($colorAttributes['values']['18757']);
    			// 				$productData['attributes'][$attrkey]['values']=$colorAttributes['values'];
    			// 			}
    			// 		}
    			// 	}
    			// 	if(isset($productData['variation_matrix']))
    			// 	{
    			// 		foreach($productData['variation_matrix'] as $key=>$data){
    			// 			if( strpos( $key, '#18757' ) >0) {
    			// 				unset($productData['variation_matrix'][$key]);
    			// 				$searchKey = array_search('18757', $productData['variation_attr_ids']['74']);
    			// 				if($searchKey>-1){
    			// 					unset($productData['variation_attr_ids']['74'][$searchKey]);
    			// 				}
    			// 			}
    			// 		}
    			// 	}
    			// 	//##########################################
    			// 	if(isset($maskProduct['color_ids']) && count($maskProduct['color_ids'])>0)
                //     {
                //         if(isset($productData['attributes']))
                //         {
                //             foreach($productData['attributes'] as $attrkey=>$colorAttributes)
                //             {
                //                 if($colorAttributes['id'] == 10)
                //                 {
                //                     foreach($colorAttributes['values'] as $key=>$colors)
                //                     {
                //                         if(in_array($key,$maskProduct['color_ids']))
                //                         {
                //                             $productData['attributes'][$attrkey]['values'][$key] = $colors; 

                //                             //change by LP
                //                             $skey = array_search($key,$maskProduct['color_ids']);
                //                             $productData['color_ids_available'][$key] = $maskProduct['color_ids_available'][$skey]; 
                //                         }
                //                         else{
                //                             unset($productData['attributes'][$attrkey]['values'][$key]);

                //                             //change by LP
                //                             unset($productData['color_ids_available'][$key]); 
                //                         }
                //                     }
                //                 }
                //             }
                //         }
                //     }

                //     $productData['full_color_default_attribute_value'] = '';
                //     if(isset($maskProduct['full_color_default_attribute_value'])){
                //         $productData['full_color_default_attribute_value'] = $maskProduct['full_color_default_attribute_value'];
                //     }
                    

                //     $default_imprint_method_single_array = $this->serviceContainer->getParameter('without_virtual')['default_imprint_method_single'];
                //     if(isset($maskProduct['image']) && count($maskProduct['image'])>0)
                //     {
                //         foreach($maskProduct['image'] as $images)
                //         {
                //             $productData['basic_information']['default_image_url'] = $images->getActualUrl();
                //             $productData['basic_information']['default_image_thumb_url']= $images->getThumbImg();
                //             $productData['basic_information']['default_color'] = $images->getDefaultColor();

                //             //change by LP
                //             $productData['basic_information']['default_imprint_color'] = $images->getDefaultImprintColor();

                //             if(is_array($images->getDefaultImprintColor(),array_keys($default_imprint_method_single_array))){
                //                 $productData['basic_information']['default_imprint_method_single'] = $default_imprint_method_single_array[$images->getDefaultImprintColor()];
                //             }
                            
                //         }                        
                //     }

                //     //change by LP START
                //     $original_sku_number_virtual = urlencode($productData['basic_information']['original_sku_number']);
                //     $supplier_id_virtual = urlencode($productData['supplier']['supplier_id']);
                //    $ch = curl_init();
                //    curl_setopt($ch, CURLOPT_URL, $this->serviceContainer->getParameter('virtual_base_url').'get-default-imprint/'.$original_sku_number_virtual.'/'.$supplier_id_virtual);
                //     curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json'));
                //     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
                    
                //     $imprint_response = curl_exec($ch);
                //     // If using JSON...
                //     $imprint_data = json_decode($imprint_response);
                //     $default_imprint_method_values = $this->serviceContainer->getParameter('without_virtual')['default_imprint_method_values'];
                    
                //     $defaultImprintMethod = $imprint_data->imprintMethod;
                //     if(in_array($imprint_data->imprintMethod,array_keys($default_imprint_method_values))){
                //         $defaultImprintMethod = $default_imprint_method_values[$imprint_data->imprintMethod];
                //     }

                //     if($defaultImprintMethod == 'Full Color'){
                //         $productData['basic_information']['default_imprint_method'] = $defaultImprintMethod;
                //     }else{
                //         if(isset($productData['basic_information']['default_imprint_color'])){
                //             $productData['basic_information']['default_imprint_method'] = $default_imprint_method_single_array[$productData['basic_information']['default_imprint_color']];    
                //         }else{
                //             $productData['basic_information']['default_imprint_method'] = $defaultImprintMethod;
                //         }
                //     }
                    
                //     //change by LP END
    				
                //     $this->productImages = array();
                //     $this->getDefaultImageKey = '';
                //     $this->actualColor = '';
                    
                //     $this->productImages = array_column($productData['images'], 'is_default');
                    
                //     if(count($this->productImages)>0)
                //     {
                //     	$this->getDefaultImageKey = array_search(1,$this->productImages);
                //     	if(isset($productData['images'][$this->getDefaultImageKey]))
                //     	{
                //     		$this->actualColor = $productData['images'][$this->getDefaultImageKey]['actual_color'];
                //     	}
                //     	else{
                //     		$this->actualColor = $productData['images'][0]['actual_color'];
                //     	}
                //     }
                //     if(count(@$maskProduct['image'])==0 && isset($this->actualColor) && !empty($this->actualColor))
                //     {
                //     	$productData['basic_information']['default_color'] = $this->actualColor;

                //         //change by LP
                //         $productData['basic_information']['default_imprint_color'] = '';
                //     }
                    
    				$productArray[$productId] = $productData;
    			}
    		}
    
    		if(isset($productMasterData['product_id'])) {
    			$productMasterData = reset($productArray);
    		} elseif(isset($productMasterData['products'])) {
    			$productMasterData['products'] = $productArray;
    		} else {
    			$productMasterData = $productArray;
    		}
    	}
        
    	unset($currency);
    	unset($country);
    	unset($productArray);
        
    
    	return $productMasterData;
    }
    public function getProductDetailsBySKUAndSupplier($productSku,$supplierId)
    {
    	$searchManager = $this->serviceContainer->get('office_brain_search_manager');
    	$this->request->query->set('sku',$productSku);
    	$this->request->query->set('original_supplier_filter',$supplierId);
    	$searchResponse = $searchManager->searchService();
    	 
    	 
    	if(isset($searchResponse['search_result_array']['data'][0])){
    		$product = $searchResponse['search_result_array']['data'][0];
    	}else{
    		$product = '';
    	}
    	unset($searchManager);
    	unset($searchResponse);
    
    	return $product;
    }
    
    
}

