<?php

namespace App\Entity;

use App\Repository\AttestationEntretienRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation\Groups;

/**
 * @ORM\Entity(repositoryClass=AttestationEntretienRepository::class)
 * @ORM\Table(schema="sav")
 */
class AttestationEntretien
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer")
     * @Groups({"api"})
     */
    private $id;

    /**
     * @ORM\Column(type="date", nullable=true)
     * @Groups({"api"})
     */
    private $date_dernier_entretien;

    /**
     * @ORM\Column(type="date", nullable=true)
     * @Groups({"api"})
     */
    private $date_dernier_ramonage;

    /**
     * @ORM\Column(type="string", length=50, nullable=true)
     * @Groups({"api"})
     */
    private $marque_appareil;

    /**
     * @ORM\Column(type="string", length=50, nullable=true)
     * @Groups({"api"})
     */
    private $modele_appareil;

    /**
     * @ORM\Column(type="boolean", nullable=true)
     * @Groups({"api"})
     */
    private $cli_refus_signature;

    /**
     * @ORM\Column(type="string", length=150, nullable=true)
     * @Groups({"api"})
     */
    private $commentaire_refus_signature;

    /**
     * @ORM\Column(type="string", length=100, nullable=true)
     * @Groups({"api"})
     */
    private $signataire_si_autre;

    /**
     * @ORM\OneToMany(targetEntity=AttestationEntretienPointControle::class, mappedBy="attestation_entretien")
     * @Groups({"api"})
     */
    private $attestationEntretienPointControles;

    /**
     * @ORM\OneToMany(targetEntity=AttestationEntretienConseil::class, mappedBy="attestation_entretien")
     * @Groups({"api"})
     */
    private $attestationEntretienConseils;

    /**
     * @ORM\OneToMany(targetEntity=Intervention::class, mappedBy="attestation_entretien")
     */
    private $interventions;

    public static function create(AttestationEntretien $attestation) {
        $attestationEntretien = new AttestationEntretien();

        $attestationEntretien
            ->setDateDernierEntretien($attestation->getDateDernierEntretien())
            ->setDateDernierRamonage($attestation->getDateDernierRamonage())
            ->setCliRefusSignature($attestation->getCliRefusSignature())
            ->setCommentaireRefusSignature($attestation->getCommentaireRefusSignature())
            ->setSignataireSiAutre($attestation->getSignataireSiAutre())
        ;
        return $attestationEntretien;
    }

    public function __construct()
    {
        $this->attestationEntretienPointControles = new ArrayCollection();
        $this->attestationEntretienConseils = new ArrayCollection();
        $this->interventions = new ArrayCollection();
    }

    public function getId(): ?int
    {
        return $this->id;
    }

    public function setId(?int $id): self
    {
        $this->id = $id;

        return $this;
    }

    public function getDateDernierEntretien(): ?\DateTimeInterface
    {
        return $this->date_dernier_entretien;
    }

    public function setDateDernierEntretien(?\DateTimeInterface $date_dernier_entretien): self
    {
        $this->date_dernier_entretien = $date_dernier_entretien;

        return $this;
    }

    public function getDateDernierRamonage(): ?\DateTimeInterface
    {
        return $this->date_dernier_ramonage;
    }

    public function setDateDernierRamonage(?\DateTimeInterface $date_dernier_ramonage): self
    {
        $this->date_dernier_ramonage = $date_dernier_ramonage;

        return $this;
    }

    public function getMarqueAppareil(): ?string
    {
        return $this->marque_appareil;
    }

    public function setMarqueAppareil(?string $marque_appareil): self
    {
        $this->marque_appareil = $marque_appareil;

        return $this;
    }

    public function getModeleAppareil(): ?string
    {
        return $this->modele_appareil;
    }

    public function setModeleAppareil(?string $modele_appareil): self
    {
        $this->modele_appareil = $modele_appareil;

        return $this;
    }

    public function getCliRefusSignature(): ?bool
    {
        return $this->cli_refus_signature;
    }

    public function setCliRefusSignature(?bool $cli_refus_signature): self
    {
        $this->cli_refus_signature = $cli_refus_signature;

        return $this;
    }

    public function getCommentaireRefusSignature(): ?string
    {
        return $this->commentaire_refus_signature;
    }

    public function setCommentaireRefusSignature(?string $commentaire_refus_signature): self
    {
        $this->commentaire_refus_signature = $commentaire_refus_signature;

        return $this;
    }

    public function getSignataireSiAutre(): ?string
    {
        return $this->signataire_si_autre;
    }

    public function setSignataireSiAutre(?string $signataire_si_autre): self
    {
        $this->signataire_si_autre = $signataire_si_autre;

        return $this;
    }

    /**
     * @return Collection<int, AttestationEntretienPointControle>
     */
    public function getAttestationEntretienPointControles(): Collection
    {
        return $this->attestationEntretienPointControles;
    }

    public function addAttestationEntretienPointControle(AttestationEntretienPointControle $attestationEntretienPointControle): self
    {
        if (!$this->attestationEntretienPointControles->contains($attestationEntretienPointControle)) {
            $this->attestationEntretienPointControles[] = $attestationEntretienPointControle;
            $attestationEntretienPointControle->setAttestationEntretien($this);
        }

        return $this;
    }

    public function removeAttestationEntretienPointControle(AttestationEntretienPointControle $attestationEntretienPointControle): self
    {
        if ($this->attestationEntretienPointControles->removeElement($attestationEntretienPointControle)) {
            // set the owning side to null (unless already changed)
            if ($attestationEntretienPointControle->getAttestationEntretien() === $this) {
                $attestationEntretienPointControle->setAttestationEntretien(null);
            }
        }

        return $this;
    }

    /**
     * @return Collection<int, AttestationEntretienConseil>
     */
    public function getAttestationEntretienConseils(): Collection
    {
        return $this->attestationEntretienConseils;
    }

    public function addAttestationEntretienConseil(AttestationEntretienConseil $attestationEntretienConseil): self
    {
        if (!$this->attestationEntretienConseils->contains($attestationEntretienConseil)) {
            $this->attestationEntretienConseils[] = $attestationEntretienConseil;
            $attestationEntretienConseil->setAttestationEntretien($this);
        }

        return $this;
    }

    public function removeAttestationEntretienConseil(AttestationEntretienConseil $attestationEntretienConseil): self
    {
        if ($this->attestationEntretienConseils->removeElement($attestationEntretienConseil)) {
            // set the owning side to null (unless already changed)
            if ($attestationEntretienConseil->getAttestationEntretien() === $this) {
                $attestationEntretienConseil->setAttestationEntretien(null);
            }
        }

        return $this;
    }

    /**
     * @return Collection<int, Intervention>
     */
    public function getInterventions(): Collection
    {
        return $this->interventions;
    }

    public function addIntervention(Intervention $intervention): self
    {
        if (!$this->interventions->contains($intervention)) {
            $this->interventions[] = $intervention;
            $intervention->setAttestationEntretien($this);
        }

        return $this;
    }

    public function removeIntervention(Intervention $intervention): self
    {
        if ($this->interventions->removeElement($intervention)) {
            // set the owning side to null (unless already changed)
            if ($intervention->getAttestationEntretien() === $this) {
                $intervention->setAttestationEntretien(null);
            }
        }

        return $this;
    }
}
