<?php

namespace Lc\CaracoleBundle\Model\Order;

use Lc\CaracoleBundle\Doctrine\Extension\PriceTrait;
use Doctrine\ORM\Mapping as ORM;
use Lc\CaracoleBundle\Doctrine\Extension\PriceInterface;
use Lc\CaracoleBundle\Model\Product\ProductInterface;
use Lc\SovBundle\Doctrine\EntityInterface;

/**
 * @ORM\MappedSuperclass()
 */
abstract class OrderProductModel implements PriceInterface, EntityInterface, OrderProductInterface
{
    use PriceTrait;

    /**
     * @ORM\ManyToOne(targetEntity="Lc\CaracoleBundle\Model\Order\OrderShopInterface", inversedBy="orderProducts", cascade={"persist"})
     * @ORM\JoinColumn(nullable=false)
     */
    protected $orderShop;

    /**
     * @ORM\ManyToOne(targetEntity="Lc\CaracoleBundle\Model\Product\ProductInterface"))
     */
    protected $product;

    /**
     * @ORM\Column(type="integer")
     */
    protected $quantityOrder;

    /**
     * @ORM\Column(type="float")
     */
    protected $quantityProduct;

    /**
     * @ORM\Column(type="string", length=255)
     */
    protected $title;

    /**
     * @ORM\OneToOne(targetEntity="Lc\CaracoleBundle\Model\Order\OrderProductReductionCatalogInterface", cascade={"persist", "remove"})
     */
    protected $orderProductReductionCatalog;

    public function __toString()
    {
        if ($this->getTitle()) {
            return $this->getTitle();
        } else {
            return $this->getProduct()->getProductFamily()->getTitle() . ' - ' . $this->getProduct()->getTitle();
        }
    }

    // isOrderProductAvailable
    /*public function isAvailable()
    {
        return $this->getProduct()->isAvailable($this->getQuantityOrder());
    }*/

    // isOrderProductAvailableAddCart
    // @TODO : à remettre en place si nécessaire
    /*public function isAvailableAddCart(OrderShopInterface $orderShop = null)
    {
        $product = $this->getProduct();
        return $this->isProductAvailable($product, $this->getQuantityOrder(), true, $orderShop);
    }*/

    public function getOrderShop(): ?OrderShopInterface
    {
        return $this->orderShop;
    }

    public function setOrderShop(?OrderShopInterface $orderShop): self
    {
        $this->orderShop = $orderShop;

        return $this;
    }

    public function getProduct(): ?ProductInterface
    {
        return $this->product;
    }

    public function setProduct(?ProductInterface $product): self
    {
        $this->product = $product;

        return $this;
    }

    public function getQuantityOrder(): ?int
    {
        return $this->quantityOrder;
    }

    public function setQuantityOrder(int $quantityOrder): self
    {
        $this->quantityOrder = $quantityOrder;

        return $this;
    }

    public function getQuantityProduct(): ?float
    {
        return $this->quantityProduct;
    }

    public function setQuantityProduct(float $quantityProduct): self
    {
        $this->quantityProduct = $quantityProduct;

        return $this;
    }

    public function getTitle(): ?string
    {
        return $this->title;
    }

    public function setTitle(string $title): self
    {
        $this->title = $title;

        return $this;
    }

    public function getOrderProductReductionCatalog(): ?OrderProductReductionCatalogInterface
    {
        return $this->orderProductReductionCatalog;
    }

    public function setOrderProductReductionCatalog(?OrderProductReductionCatalogInterface $orderProductReductionCatalog): self
    {
        $this->orderProductReductionCatalog = $orderProductReductionCatalog;

        return $this;
    }


}