<?php

namespace App\Entity;

use App\Repository\StockRepository;
use DateTimeInterface;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;

#use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;

#[ORM\Entity(repositoryClass: StockRepository::class)]
#[ORM\UniqueEntity(['warehouse_id', 'product_id'])]
#[ORM\UniqueConstraint(
    name: 'UNIQ_D34A04ADDCD6110',
    columns: ['warehouse_id', 'product_id']
)]
class Stock
{
    #[ORM\Id]
    #[ORM\GeneratedValue]
    #[ORM\Column]
    private ?int $id = null;

    #[ORM\Column]
    private ?int $instock = null;
    #[ORM\Column]
    private ?int $product_id = null;

    #[ORM\ManyToOne(inversedBy: 'stocks')]
    private ?Warehouse $warehouse = null;

    #[ORM\Column(name: 'update_time', type: Types::DATETIME_MUTABLE, nullable: true, options: ['default' => 'CURRENT_TIMESTAMP'])]
    private ?DateTimeInterface $update_time = null;


    public function getId(): ?int
    {
        return $this->id;
    }

    public function setId(int $id): ?self
    {
        $this->id = $id;
        return $this;
    }

    public function getInstock(): ?int
    {
        return $this->instock;
    }

    public function setInstock(int $instock): self
    {
        $this->instock = $instock;

        return $this;
    }

    public function getProductId(): ?int
    {
        return $this->product_id;
    }

    public function setProductId(int $product_id): self
    {
        $this->product_id = $product_id;

        return $this;
    }

    public function getWarehouseId(): ?int
    {
        return $this->warehouse_id;
    }

    public function setWarehouseId(int $warehouse_id): self
    {
        $this->warehouse_id = $warehouse_id;

        return $this;
    }

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

    public function setProduct(?Product $product): self
    {
        // unset the owning side of the relation if necessary
        if ($product === null && $this->product !== null) {
            $this->product->setStock(null);
        }

        // set the owning side of the relation if necessary
        if ($product !== null && $product->getStock() !== $this) {
            $product->setStock($this);
        }

        $this->product = $product;

        return $this;
    }

    public function getWarehouse(): ?Warehouse
    {
        return $this->warehouse;
    }

    public function setWarehouse(?Warehouse $warehouse): self
    {
        $this->warehouse = $warehouse;

        return $this;
    }

    public function getUpdateTime(): ?DateTimeInterface
    {
        return $this->update_time;
    }

    public function setUpdateTime(?DateTimeInterface $update_time): self
    {
        $this->update_time = $update_time;

        return $this;
    }
}