<?php

namespace Lc\ShopBundle\Services\Price;


use Doctrine\Common\Collections\Collection;
use Lc\ShopBundle\Context\OrderProductInterface;
use Lc\ShopBundle\Context\OrderShopInterface;
use Lc\ShopBundle\Context\ProductFamilyInterface;
use Lc\ShopBundle\Context\ProductInterface;
use Lc\ShopBundle\Context\ProductPropertyInterface;
use Lc\ShopBundle\Context\ReductionCatalogInterface;

class OrderProductPriceUtils
{
        use PriceUtilsTrait ;

        protected $productPriceUtils ;

        public function __construct(ProductPriceUtils $productPriceUtils)
        {
                $this->productPriceUtils = $productPriceUtils ;
        }

        public function getPrice(OrderProductInterface $orderProduct)
        {
                return $orderProduct->getPrice();
        }

        public function getPriceWithTax(OrderProductInterface $orderProduct)
        {
                return $this->applyTax(
                        $this->getPrice($orderProduct),
                        $orderProduct->getTaxRate()->getValue()
                );
        }

        public function getPriceWithTaxAndReduction(OrderProductInterface $orderProduct)
        {
                return $this->applyReductionCatalog(
                        $orderProduct,
                        $this->getPrice($orderProduct),
                        $this->getPriceWithTax($orderProduct)
                );

        }

        public function getTotal(OrderProductInterface $orderProduct)
        {
                return $orderProduct->getQuantityOrder() * $this->getPrice($orderProduct);
        }


        public function getTotalWithReduction(OrderProductInterface $orderProduct)
        {
                return $this->applyReductionCatalog(
                        $orderProduct,
                        $this->getTotal($orderProduct),
                        $this->getTotalWithTax($orderProduct),
                        null,
                        false
                );
        }

        public function getTotalWithTax(OrderProductInterface $orderProduct)
        {
                return $this->applyTax(
                        $this->getTotal($orderProduct),
                        $orderProduct->getTaxRateInherited()->getValue()
                );
        }

        public function getTotalWithTaxAndReduction(OrderProductInterface $orderProduct)
        {
                return $this->applyReductionCatalog(
                        $orderProduct,
                        $this->getTotal($orderProduct),
                        $this->getTotalWithTax($orderProduct)
                );
        }

        //inclus toujours les réductions catalogues
        public function getTotalTaxes(OrderProductInterface $orderProduct){
                return $this->getTotalWithTaxAndReduction($orderProduct) - $this->getTotalWithReduction($orderProduct);
        }
}