<?php

namespace App\Entity;

use App\Repository\TauxTvaRepository;
use App\Utils\Functions;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Symfony\Component\Serializer\Annotation\SerializedName;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation\Ignore;
use Symfony\Component\Serializer\Annotation\Groups;

/**
 * @ORM\Entity(repositoryClass=TauxTvaRepository::class)
 * @ORM\Table(schema="sav")
 */
class TauxTva
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer")
     * @Groups({"api", "site_list"})
     */
    private $id;

    /**
     * @ORM\Column(type="float", nullable=true)
     * @Groups({"api", "site_list"})
     */
    private $taux;

    /**
     * @ORM\Column(type="string", length=20, nullable=true)
     * @Groups({"api", "site_list"})
     */
    private $libelle;

    /**
     * @ORM\Column(type="boolean", nullable=true,  options={"default" = 1})
     * @Groups({"site_list"})
     */
    private $actif = false;

    /**
     * @ORM\OneToMany(targetEntity=Equipement::class, mappedBy="taux_tva")
     * @Ignore()
     */
    private $equipements;

    /**
     * @ORM\OneToMany(targetEntity=FactureLigne::class, mappedBy="taux_tva")
     */
    private $factureLignes;

    /**
     * @ORM\OneToMany(targetEntity=DevisLigne::class, mappedBy="taux_tva")
     */
    private $devisLignes;

    /**
     * @ORM\OneToMany(targetEntity=FactureTva::class, mappedBy="taux_tva")
     */
    private $factureTvas;

    /**
     * @ORM\Column(type="date", nullable=true)
     * @Groups({"site_list"})
     */
    private $date_application;

    /**
     * @ORM\Column(type="date", nullable=true)
     * @Groups({"site_list"})
     */
    private $date_fin_application;

    /**
     * @ORM\OneToOne(targetEntity=TauxTva::class)
     * @ORM\JoinColumn(nullable=true, name="id_ancien_taux_tva"))
     */
    private $ancien_taux_tva;

    /**
     * @SerializedName("ancien_taux_tva")
     * @Groups({"site_list"})
     */
    public function getAncientTauxTvaId() {
        return ($this->ancien_taux_tva) ? $this->ancien_taux_tva->getId() : null;
    }

    public function __construct()
    {
        $this->equipements = new ArrayCollection();
        $this->factureLignes = new ArrayCollection();
        $this->devisLignes = new ArrayCollection();
        $this->factureTvas = new ArrayCollection();
    }

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

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

        return $this;
    }

    public function getTaux(): ?float
    {
        return $this->taux;
    }

    public function setTaux(?float $taux): self
    {
        $this->taux = $taux;

        return $this;
    }

    public function getLibelle(): ?string
    {
        return $this->libelle;
    }

    public function setLibelle(?string $libelle): self
    {
        $this->libelle = $libelle;

        return $this;
    }

    public function getActif(): ?bool
    {
        return $this->actif;
    }

    public function setActif(?bool $actif): self
    {
        $this->actif = $actif;

        return $this;
    }

    /**
     * @return Collection<int, Equipement>
     */
    public function getEquipements(): Collection
    {
        return $this->equipements;
    }

    public function addEquipement(Equipement $equipement): self
    {
        if (!$this->equipements->contains($equipement)) {
            $this->equipements[] = $equipement;
            $equipement->setTauxTva($this);
        }

        return $this;
    }

    public function removeEquipement(Equipement $equipement): self
    {
        if ($this->equipements->removeElement($equipement)) {
            // set the owning side to null (unless already changed)
            if ($equipement->getTauxTva() === $this) {
                $equipement->setTauxTva(null);
            }
        }

        return $this;
    }

    /**
     * @return Collection<int, FactureLigne>
     */
    public function getFactureLignes(): Collection
    {
        return $this->factureLignes;
    }

    public function addFactureLigne(FactureLigne $factureLigne): self
    {
        if (!$this->factureLignes->contains($factureLigne)) {
            $this->factureLignes[] = $factureLigne;
            $factureLigne->setTauxTva($this);
        }

        return $this;
    }

    public function removeFactureLigne(FactureLigne $factureLigne): self
    {
        if ($this->factureLignes->removeElement($factureLigne)) {
            // set the owning side to null (unless already changed)
            if ($factureLigne->getTauxTva() === $this) {
                $factureLigne->setTauxTva(null);
            }
        }

        return $this;
    }

    /**
     * @return Collection<int, DevisLigne>
     */
    public function getDevisLignes(): Collection
    {
        return $this->devisLignes;
    }

    public function addDevisLigne(DevisLigne $devisLigne): self
    {
        if (!$this->devisLignes->contains($devisLigne)) {
            $this->devisLignes[] = $devisLigne;
            $devisLigne->setTauxTva($this);
        }

        return $this;
    }

    public function removeDevisLigne(DevisLigne $devisLigne): self
    {
        if ($this->devisLignes->removeElement($devisLigne)) {
            // set the owning side to null (unless already changed)
            if ($devisLigne->getTauxTva() === $this) {
                $devisLigne->setTauxTva(null);
            }
        }

        return $this;
    }

    /**
     * @return Collection<int, FactureTva>
     */
    public function getFactureTvas(): Collection
    {
        return $this->factureTvas;
    }

    public function addFactureTva(FactureTva $factureTva): self
    {
        if (!$this->factureTvas->contains($factureTva)) {
            $this->factureTvas[] = $factureTva;
            $factureTva->setTauxTva($this);
        }

        return $this;
    }

    public function removeFactureTva(FactureTva $factureTva): self
    {
        if ($this->factureTvas->removeElement($factureTva)) {
            // set the owning side to null (unless already changed)
            if ($factureTva->getTauxTva() === $this) {
                $factureTva->setTauxTva(null);
            }
        }

        return $this;
    }

    public function getDateApplication()
    {
        return $this->date_application;
    }

    public function setDateApplication($date_application): self
    {
        if (is_string($date_application)) {
            $this->date_application =  Functions::getDateTimeFromString($date_application);
        } else{
            $this->date_application = $date_application;
        }

        return $this;
    }

    public function getDateFinApplication()
    {
        return $this->date_fin_application;
    }

    public function setDateFinApplication( $date_fin_application): self
    {
        if (is_string($date_fin_application)) {
            $this->date_fin_application =  Functions::getDateTimeFromString($date_fin_application);
        } else{
            $this->date_fin_application = $date_fin_application;
        }

        return $this;
    }

    public function getAncienTauxTva(): ?self
    {
        return $this->ancien_taux_tva;
    }

    public function setAncienTauxTva(?self $ancien_taux_tva): self
    {
        $this->ancien_taux_tva = $ancien_taux_tva;

        return $this;
    }
}
