<?php

namespace OfficeBrain\Bundle\ProductBundle\Helper;

/**
 * Product Detail Helper class
 *
 * @author OfficeBrain 4646 <info@officebrain.com>
 * Description : Helper class to set Product common data
 */
class PluginDataHelper
{
	public function __construct($serviceContainer){
		$this->serviceContainer = $serviceContainer;
		$this->translator = $this->serviceContainer->get('translator');
	}
	
	public function getShippingDataForPlugin($language_code, $data_to_set, $shippingInfo = array()){
		//shipping
		//TODO: get it from configuration
		//TODO: get it from translation
		
		$shipping_weight_params = array('LBS','kg','gm','Oz');
		$shipping_size_params = array('inches','millimeter','centimeter');
	
		$carton = $product = array();
		$qtyPerCarton = !empty($shippingInfo['quantity_in_carton'])?$shippingInfo['quantity_in_carton']:'';
		$carton[] = array('lable'=>'Quantity in Carton','name'=>'carton_quantity','value'=>$qtyPerCarton,'attributes'=>array());
	
		//Set cartoon Weight
		$cWeight = !empty($shippingInfo['carton']['weight']['param'])?$shippingInfo['carton']['weight']['param']:'';
		$cWeightUnit = !empty($shippingInfo['carton']['weight']['unit']) ? $shippingInfo['carton']['weight']['unit']:'';
		$data = array();
		foreach ($shipping_weight_params as $weight_params) {
			$selected = false;
			if(strtolower($cWeightUnit) == strtolower($weight_params))
				$selected = true;
			$data[] = array('lable'=>$weight_params, 'selected'=>$selected);
		}
		$carton[] = array('lable'=>$this->translator->trans('product_add_edit.carton_weight'),'name'=>'carton_weight','value'=>$cWeight,'attributes'=>array('name'=>'carton_weight_unit','data'=>$data));
	
		$data = array();
		$cLengthUnit = !empty($shippingInfo['carton']['width']['unit'])?$shippingInfo['carton']['width']['unit']:'';
		foreach ($shipping_size_params as $width_params) {
			$selected = false;
			if($cLengthUnit==$width_params)
				$selected = true;
			$data[] = array('lable'=>$width_params, 'selected'=>$selected );
		}
	
		//Set Carton Size
		$cWidth = !empty($shippingInfo['carton']['width']['param'])?$shippingInfo['carton']['width']['param']:'';
		$cHeight = !empty($shippingInfo['carton']['height']['param'])?$shippingInfo['carton']['height']['param']:'';
		$cLength = !empty($shippingInfo['carton']['length']['param'])?$shippingInfo['carton']['length']['param']:'';
		
		$carton[] = array('lable'=>$this->translator->trans('product_add_edit.carton_size'),
						array(array('lable'=>'L','name'=>'carton_length','value'=>$cLength),
							array('lable'=>'W','name'=>'carton_width','value'=>$cWidth),
							array('lable'=>'H','name'=>'carton_height','value'=>$cHeight)),
						array('name'=>'carton_size_unit','data'=>$data,'value'=>$cLengthUnit));

		
		
	
		//Set product Weight
		$data = array();
		$pWeight = !empty($shippingInfo['product']['weight']['param'])?$shippingInfo['product']['weight']['param']:'';
		$pWeightUnit = !empty($shippingInfo['product']['weight']['unit']) ? $shippingInfo['product']['weight']['unit']:'';
		foreach ($shipping_weight_params as $weight_params) {
			$selected = false;
			if(strtolower($pWeightUnit) == strtolower($weight_params))
				$selected = true;
			
			$data[] = array('lable'=>$weight_params, 'selected'=>$selected);
		}
		$product[] = array('lable'=> $this->translator->trans('product_add_edit.product_weight'),'name'=>'product_weight','value'=>$pWeight,'attributes'=>array('name'=>'product_weight_unit','data'=>$data));
	
	
		$data = array();
		$pLengthUnit = !empty($shippingInfo['product']['width']['unit'])?$shippingInfo['product']['width']['unit']:'';
		
		foreach ($shipping_size_params as $width_params) {
			$selected = false;
			if($pLengthUnit==$width_params)
				$selected = true;
			
			$data[] = array('lable'=>$width_params, 'selected'=>$selected);
		}
		$pWidth = !empty($shippingInfo['product']['width']['param'])?$shippingInfo['product']['width']['param']:'';
		$pHeight = !empty($shippingInfo['product']['height']['param'])?$shippingInfo['product']['height']['param']:'';
		$pLength = !empty($shippingInfo['product']['length']['param'])?$shippingInfo['product']['length']['param']:'';
		
		$product[] = array('lable'=> $this->translator->trans('product_add_edit.product_size'),
				array(array('lable'=>'L','name'=>'product_length','value'=>$pLength),
						array('lable'=>'W','name'=>'product_width','value'=>$pWidth),
						array('lable'=>'H','name'=>'product_height','value'=>$pHeight)),
				array('name'=>'product_size_unit','data'=>$data,'value'=>$pLengthUnit));
		
		$fob = !empty($shippingInfo['free_on_board'])?$shippingInfo['free_on_board']:'';
		$fob = array('lable'=> $this->translator->trans('product_add_edit.fob'),'value'=>$fob,'name'=>'fob');
		$fobCity = !empty($shippingInfo['city'])?$shippingInfo['city']:'';
		$fobCity = array('lable'=>$this->translator->trans('product_add_edit.fobcity'),'name'=>'city','value'=>$fobCity);
	
		$data_to_set['plugin_data']['shipping_detail'][] = array('id'=>$language_code, 'name'=>"Shipping",'Carton'=>$carton,'Product'=>$product,'Fob'=>$fob,'City'=>$fobCity);
		
		return $data_to_set;
	}
	
	public function getAttributeDataForPlugin($language_code, $language, $data_to_set,$exclude_ids,$editAttributes=array(),$editAttributeValues=array()){
		//debug_print_backtrace(2);die;
		$attribute_api_manager = $this->serviceContainer->get('officebrain_attribute_api_manager');
		$attribute_data_from_api= $attribute_api_manager->getList($language_code,array(),0,$exclude_ids);
		$attribute_data_from_api = $attribute_data_from_api[$language_code];
		
		//ATTRIBUTES
		if($attribute_data_from_api){
			foreach ($attribute_data_from_api as $attribute_id=>$attribute) {
				$isFound = false;
				if(!empty($editAttributes)){
					foreach($editAttributes as $editAttribute){
						if($editAttribute['attribute_id']==$attribute['id']){
							$isFound = true;
							break;
						}
					}
				}
				$data_to_set['plugin_data']['detail_title'][] = array('id'=>'attribute_'.$attribute['id'], 'title'=>$attribute['label'], 'name'=>$attribute['label'],
						"checked"=>$isFound,'rules'=>"require_from_group","value"=>$attribute['id']);
				$data_to_append = array();
				$data_to_append = array('language'=>$language_code, 'value'=>$attribute['id'],"id"=>"attribute_".$attribute['id'], "addBtn"=> "","deleteBtn"=> "", "filterType"=>"autofill", "title"=> $attribute['label']);
				
				/*if (array_key_exists($attribute_id, $attribute_values)) {
				 foreach ($attribute_values[$attribute_id] as $value_id=>$value) {
				$data_to_append['subAttributesName'][] = array('value'=>$value_id,'name'=>$value,'selected'=>false);
				}
				}*/
				$attribute_data[] = $data_to_append;
			}
		
			$data_to_set['plugin_data']['detail'][] = array('id'=>$language_code,'name'=>$language,'attributesName'=>$attribute_data,'attribute_values'=>$editAttributeValues);
		}
		
		return $data_to_set;
	}
	
    
    public function getImprintDataForPlugin($language_code, $language, $data_to_set,$exclude_ids = array(), $imprintMasterId, $fixedChargesArray, $quantityWiseChargesArray, $optionalChargesArray, $editParams = array()) {
        $attribute_data_from_api = $this->serviceContainer->get('officebrain_attribute_api_manager')->getList($language_code, $imprintMasterId, '1', $exclude_ids);
        $attribute_data_from_api = $attribute_data_from_api[$language_code];
       
        $data_to_set['plugin_data']['imprint_detail_title'][0] = array('imprint_method'=>$this->translator->trans('product_add_edit.imprint_method'), 'imprint_position'=>$this->translator->trans('product_add_edit.imprint_position'), 'imprint_color'=>$this->translator->trans('product_add_edit.imprint_color'));
        if($attribute_data_from_api){
	        foreach ($attribute_data_from_api as $attribute_id=>$attribute) {
	        	if(array_key_exists('attribute_values',$attribute)){
		            foreach ($attribute['attribute_values'] as $cnt => $imprintValue) {
		                $keyExists = false;
		                if (isset($editParams['imprint_methods'])) {
		                    $keyExists = array_key_exists($imprintValue['attribute_value_id'], $editParams['imprint_methods']);
		                }
		                $data_to_set['plugin_data']['imprint_detail_title'][1][$cnt] = array('id'=>'imp_'.$imprintValue['attribute_value_id'], 'title'=>$imprintValue['attribute_value'], 'name'=>$imprintValue['attribute_value'],
		                    "checked"=>$keyExists,'rules'=>"require_from_group","value"=>$imprintValue['attribute_value_id'], 'attribute_master_id'=>$attribute['id']);
		                $data_to_set['plugin_data']['imprint_detail_title'][1][$cnt]['edit_data'] = isset($editParams['imprint_method_information'][$imprintValue['attribute_value_id']]) ? $editParams['imprint_method_information'][$imprintValue['attribute_value_id']] : '';
		            }
	        	}
	            $qtyWiseCharge = array();
	            array_walk($quantityWiseChargesArray, function (&$value,$key) use (&$qtyWiseCharge) {
	                $tmpVar['label'] = $value;
	                $tmpVar['id'] = $key;
	                $tmpVar['quantity_wise'] = true;
	                $qtyWiseCharge[] = $tmpVar;
	              }
	            );
	            
	            
                $optionalCharges = array();
                ksort($optionalChargesArray);
                array_walk($optionalChargesArray, function (&$value,$key) use (&$optionalCharges) {
                        $tmpVar['label'] = $value;
                        $tmpVar['id'] = $key;
                        $tmpVar['quantity_wise'] = true;
                        $optionalCharges[] = $tmpVar;
                    }
                );
                
                
	            $data_to_set['plugin_data']['imprint_detail_title'][2] = $fixedChargesArray;
	            $data_to_set['plugin_data']['imprint_detail_title'][3] = $qtyWiseCharge;
	            $data_to_set['plugin_data']['imprint_detail_title'][4] = $optionalCharges;
	            
	            $data_to_append = array();
	            $data_to_append = array('language'=>$language_code, 'value'=>$attribute['id'],"id"=>"attribute_".$attribute['id'], "addBtn"=> "","deleteBtn"=> "", "filterType"=>"autofill", "title"=> $attribute['label']);
	            $data_to_append['subAttributesName'] = array();
	            
// 	            print_R($data_to_set['plugin_data']['imprint_detail_title']); die;
	            /*if (array_key_exists($attribute_id, $attribute_values)) {
	             foreach ($attribute_values[$attribute_id] as $value_id=>$value) {
	            $data_to_append['subAttributesName'][] = array('value'=>$value_id,'name'=>$value,'selected'=>false);
	            }
	            }*/

	            //$attribute_data[] = $data_to_append;
	        }
        }
// 		echo "<pre>";
// 		print_r($data_to_set['plugin_data']['imprint_detail_title']);
// 		die;
// 		$data_to_set['plugin_data']['imprint_detail_title'][] = array('id'=>$language_code,'name'=>$language,'attributesName'=>$attribute_data);
        
        return $data_to_set;
    }
    
    public function getPackagingDataForPlugin($language_code,$language, $data_to_set,$exclude_ids = array(), $packagingTypeMasterId,$editParams){
    	$attribute_data_from_api = $this->serviceContainer->get('officebrain_attribute_api_manager')->getList($language_code, $packagingTypeMasterId, '1', $exclude_ids);
    	$attribute_data_from_api = $attribute_data_from_api[$language_code];
    	
    	$data_to_set['plugin_data']['packaging_type_data'][0] = array('packaging_type'=>$this->translator->trans('product_add_edit.packaging_type'));
    	if($attribute_data_from_api){
    		foreach ($attribute_data_from_api as $attribute_id=>$attribute) {
    			if(array_key_exists('attribute_values',$attribute)){
    				foreach ($attribute['attribute_values'] as $cnt => $imprintValue) {
    					$keyExists = false;
    					if (isset($editParams['packaging_type_data'])) {
    						$keyExists = array_key_exists($imprintValue['attribute_value_id'], $editParams['packaging_type_data']);
    					}
    					$data_to_set['plugin_data']['packaging_type_data'][1][$cnt] = array('id'=>'pkg_'.$imprintValue['attribute_value_id'], 
    									'title'=>$imprintValue['attribute_value'], 'name'=>$imprintValue['attribute_value'],
    									"selected"=>$keyExists,'rules'=>"require_from_group","value"=>$imprintValue['attribute_value_id'], 
    									'attribute_master_id'=>$attribute['id']);
    				}
    			}
    		}
    	}
    	$data_to_set['plugin_data']['packaging_type_data']['edit_data'] = isset($editParams['packaging_type_data']) ? $editParams['packaging_type_data']: '';
    	
    	return $data_to_set;
    }
	
	public function getBrandDataForPlugin($language_code, $language, $data_to_set,$editBrandInfo = array(),$supplierId=""){
		$brandApiManager= $this->serviceContainer->get("officebrain_brand_api_manager");
		//$brandData = $brandApiManager->getList($language_code);
		// supplierId used for get supplierwise Brand. if project settings "supplierwise_brand":0 its retrive all brand data.
		$brandData = $brandApiManager->getList($language_code,array(),"","","","","",0,$supplierId);
		$brandType = array();
		if(count($brandData)> 0){
			foreach ($brandData[$language_code] as $brand) {
				//$_brand=(!empty($editParams[$localization]['brand']) ? $editParams[$localization]['brand'] : "");
				if(isset($editBrandInfo['id']) && $brand['brand_id']==$editBrandInfo['id']){
					//$brand['image'] = $editBrandInfo['image'];
					$brand_checked = true;
				}else{
					$brand_checked = false;
				}
				$brandType[] = array('id'=>'brand_id_'.$brand['pms_id'],'val'=>$brand['pms_id'],'name'=>$brand['name'],'checked'=>$brand_checked,'thumburl'=>$brand['image']);
			}
		}
		$data_to_set['plugin_data']['brand'][] = array('id'=>$language_code,'brandname'=>'brand','brandType'=>$brandType);
		
		return $data_to_set;
		
	}
}