<?php
namespace OfficeBrain\Bundle\TaxBundle\Manager\Extended;

use OfficeBrain\Bundle\TaxBundle\Manager\AbstractManager\ShippingTaxAbstract;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\Session\Flash\FlashBag;
use Symfony\Component\DependencyInjection\ContainerInterface as Container;


class ShippingTaxGuestExtended extends ShippingTaxAbstract
{
	public function __construct($entityManager, $request, $productDetailManager, $twig, $commonLibraryManager,$twigExtension,$userContactBookManager,$coreManager,$session,$paginatorManager)
	{
		parent::__construct($entityManager, $request, $productDetailManager, $twig, $commonLibraryManager,$twigExtension,$userContactBookManager,$coreManager,$session,$paginatorManager);
	}

	public function __destruct()
	{
		parent::__destruct();
	}

	
	/**
	 * @author Employee Id: 4471
	 * OB eCommerce Product - tax calculation
	 * To calculate tax shipping wise
	 */
	public function calculateTaxShippingWise($dataCharges) {
		$totalQuantity=$this->request->get('total_qty');
		$taxShippingWiseResult=array();
		$productPrice=0;
		$taxShippingWise= array();
		$taxShippingWiseFinalResult = array();
		$totalCharge=0;
		$priority = $this->configurationRule['option']['shipping_tax']['option']['priority']['status'];
		$this->productId=$this->request->get('product_id');
		$productData=$this->getProductDetailById($this->productId,$this->cultureCode);
		$productCat= isset($productData['category']) ? $productData['category'] : array();
		$orderType=$this->request->get('order_type');
		if($orderType == 'decoration')
		{
			$orderType = 'decorative';
		}
		if(isset($productData['pricing'])){
			foreach ($productData['pricing'] as $typeKey=>$typeData){
				if($typeKey==$orderType) {
					foreach ($typeData as $priceKey=>$priceData){
						if(isset($priceData['rate'])) {
							if($priceData['to']!='' && $priceData['from']!='') {
								if($totalQuantity>=intval($priceData['from']) && $totalQuantity<=intval($priceData['to'])) {
									$productPrice=(double)$priceData['rate'];
								}else{
									if($totalQuantity>intval($priceData['to'])){
										$productPrice=(double)$priceData['rate'];
									}
								}
							} else if($priceData['from']!='') {
								if($totalQuantity>=intval($priceData['from'])) {
									$productPrice=(double)$priceData['rate'];
								}
							}
						}
					}
				}
			}
		}
		$productPrice = $this->twigExtension->priceFilter($productPrice);
		if($this->sessionManager->get('order_guest_shipping_address')!==null && count($this->sessionManager->get('order_guest_shipping_address')[$this->productId]) > 0) {
			$shippingType=$this->request->get('shipping_method')['shipping_type'];
			for($i=0;$i<count($dataCharges);$i++) {
				$totalCharge+=(double)$dataCharges[$i]['charges_amount'];
			}
			for($i=0;$i<count($this->sessionManager->get('order_guest_shipping_address')[$this->productId][$shippingType]);$i++) {
				$totalChargeForCurrentSplit=0;
				$taxShippingWiseValue[$i] = 0;
				$shippingDetail = $this->sessionManager->get('order_guest_shipping_address')[$this->productId][$shippingType][$i];
				//$taxShippingWise=$this->request->get('shipping_method')['shipping_detail'][$i]['tax_shipping_wise']!==null ? (double)$this->request->get('shipping_method')['shipping_detail'][$i]['tax_shipping_wise'] : 0;
				$taxShippingWiseObj = $this->getShippingTax($shippingDetail['countryId'],$shippingDetail['stateId'],$productCat,$this->productId);
				$totalQuantityPerShipping=0;
				if(isset($this->request->get('shipping_method')['shipping_detail'][$i]['color_quantity'])) {
					foreach ($this->request->get('shipping_method')['shipping_detail'][$i]['color_quantity'] as $colorId => $colorData) {
						if(isset($colorData['size'])){
							foreach($colorData['size'] as $sizeId =>$size){
								$totalQuantityPerShipping+=intval($colorData['quantity'][$sizeId]);
							}
						}else{
							$totalQuantityPerShipping+=intval($colorData['quantity'][0]);
						}
					}
				}
				$taxShippingWiseResult[$i] = 0;
					$countTax = count($taxShippingWiseObj);
					if($countTax>0)
					{
						if($countTax == 1)
						{
							$taxShippingWiseValue[$i] = $taxShippingWiseObj[0]->getTaxId()->getTaxValue();
							$taxShippingWiseType[$i] = $taxShippingWiseObj[0]->getTaxId()->getTaxType();
							if($shippingType=="standard") {
								if($taxShippingWiseValue[$i] != 0 )
								{
									if($taxShippingWiseType[$i]=='percentage')
									{	
										$taxShippingWiseResult[$i]=(($totalQuantityPerShipping*$productPrice)+$totalCharge)*($taxShippingWiseValue[$i]/100);
									}
									else
									{
										$taxShippingWiseResult[$i]=$taxShippingWiseValue[$i];
									}
								}
							} else if($shippingType=="split") {
								if($totalCharge>0) {
									$totalChargeForCurrentSplit=(($totalCharge)/$totalQuantity)*$totalQuantityPerShipping;
								}
								if($taxShippingWiseValue[$i] != 0 )
								{
									if($taxShippingWiseType[$i]=='percentage')
									{
										$taxShippingWiseResult[$i]=(($totalQuantityPerShipping*$productPrice)+$totalChargeForCurrentSplit)*($taxShippingWiseValue[$i]/100);
									}
									else
									{
										$taxShippingWiseResult[$i]=$taxShippingWiseValue[$i];
									}
								}
							}
						}
						else
						{
							$taxShippingWiseValue = array();
							$taxShippingWiseType = array();
							$taxShippingWiseResult = array();
							$finalTaxShippingWise[$i] = 0;
							
							foreach ($taxShippingWiseObj as $index=>$taxShippingWise)
							{
								$taxShippingWiseValue[$i][$index] = $taxShippingWiseObj[$index]->getTaxId()->getTaxValue();
								$taxShippingWiseType[$i][$index] = $taxShippingWiseObj[$index]->getTaxId()->getTaxType();
								if($shippingType=="standard") {
									if($taxShippingWiseValue[$i][$index] != 0 )
									{
										if($taxShippingWiseType[$i][$index]=='percentage')
										{
											$taxShippingWiseResult[$i][$index]=(($totalQuantityPerShipping*$productPrice)+$totalCharge)*($taxShippingWiseValue[$i][$index]/100);
										}
										else
										{
											$taxShippingWiseResult[$i][$index]=$taxShippingWiseValue[$i][$index];
										}
										if($index==0)
										{
											$finalTaxShippingWise[$i] = $taxShippingWiseResult[$i][$index];
										}
										elseif($priority == 'high')
										{
											if ($finalTaxShippingWise[$i] < $taxShippingWiseResult[$i][$index] )
											{
												$finalTaxShippingWise[$i] = $taxShippingWiseResult[$i][$index];
											}
										}
										elseif ($priority == 'low')
										{
											if ($finalTaxShippingWise[$i] > $taxShippingWiseResult[$i][$index] )
											{
												$finalTaxShippingWise[$i] = $taxShippingWiseResult[$i][$index];
											}
										}
									}
								} else if($shippingType=="split") {
									if($totalCharge>0) {
										$totalChargeForCurrentSplit=(($totalCharge)/$totalQuantity)*$totalQuantityPerShipping;
									}
									if($taxShippingWiseValue[$i][$index] != 0 )
									{
										if($taxShippingWiseType[$i][$index]=='percentage')
										{
											$taxShippingWiseResult[$i][$index]=(($totalQuantityPerShipping*$productPrice)+$totalChargeForCurrentSplit)*($taxShippingWiseValue[$i][$index]/100);
										}
										else
										{
											$taxShippingWiseResult[$i][$index]=$taxShippingWiseValue[$i][$index];
										}
										if($i==0)
										{
											$finalTaxShippingWise[$i] = $taxShippingWiseResult[$i][$index];
										}
										elseif($priority == 'high')
										{
											if ($finalTaxShippingWise[$i] < $taxShippingWiseResult[$i][$index] )
											{
												$finalTaxShippingWise[$i] = $taxShippingWiseResult[$i][$index];
											}
										}
										elseif ($priority == 'low')
										{
											if ($finalTaxShippingWise[$i] > $taxShippingWiseResult[$i][$index] )
											{
												$finalTaxShippingWise[$i] = $taxShippingWiseResult[$i][$index];
											}
										}
									}
								}
							}
							$taxShippingWiseResult[$i]= $finalTaxShippingWise[$i];
						}
					}
					$taxShippingWiseFinalResult[$i]=$this->twigExtension->priceFilter($taxShippingWiseResult[$i]);
			}
	
		}
	
		return array("tax_shipping_wise"=>$taxShippingWiseFinalResult,"currency_symbol"=>$productData['currency']['symbol'],'unit_shipping_tax'=>$taxShippingWiseValue);
	}

}