<?php

namespace App\Entity;

use App\Repository\TchatMessageRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\ORM\Mapping\Index;
use Symfony\Component\Serializer\Annotation\Ignore;

/**
 * @ORM\Entity(repositoryClass=TchatMessageRepository::class)
 * @ORM\Table(schema="sav")
 * @ORM\HasLifecycleCallbacks()
 */
class TchatMessage
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="text")
     */
    private $contenu;

    /**
     * @ORM\ManyToOne(targetEntity=Utilisateur::class, inversedBy="messages")
     * @ORM\JoinColumn(name="idutilisateur")
     */
    private $utilisateur;

    /**
     * @ORM\ManyToOne(targetEntity=Groupe::class, inversedBy="messages")
     * @ORM\JoinColumn(name="idgroupe")
     */
    private $groupe;

    /**
     * @ORM\Column(type="datetime")
     */
    private $date_envoi;

    /**
     * @ORM\OneToMany(targetEntity=GroupeUtilisateur::class, mappedBy="dernier_message_lu")
     * @Ignore()
     */
    private $groupeUtilisateurs;

    public function __construct()
    {
        $this->groupeUtilisateurs = new ArrayCollection();
    }


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

    /**
     * @return mixed
     */
    public function getUtilisateur()
    {
        return $this->utilisateur;
    }

    /**
     * @param mixed $utilisateur
     */
    public function setUtilisateur($utilisateur)
    {
        $this->utilisateur = $utilisateur;
    }

    /**
     * @return mixed
     */
    public function getContenu()
    {
        return $this->contenu;
    }

    /**
     * @param mixed $contenu
     */
    public function setContenu($contenu)
    {
        $this->contenu = $contenu;
    }

    /**
     * @return mixed
     */
    public function getGroupe()
    {
        return $this->groupe;
    }

    /**
     * @param mixed $groupe
     */
    public function setGroupe($groupe)
    {
        $this->groupe = $groupe;
    }

    /**
     * @ORM\PrePersist()
     */
    public function prePersist() {
        $this->date_envoi = new \DateTime();
    }

    public function getDateEnvoi(): ?\DateTimeInterface
    {
        return $this->date_envoi;
    }

    public function setDateEnvoi(\DateTimeInterface $date_envoi): self
    {
        $this->date_envoi = $date_envoi;

        return $this;
    }

    /**
     * @return Collection<int, GroupeUtilisateur>
     */
    public function getGroupeUtilisateurs(): Collection
    {
        return $this->groupeUtilisateurs;
    }

    public function addGroupeUtilisateur(GroupeUtilisateur $groupeUtilisateur): self
    {
        if (!$this->groupeUtilisateurs->contains($groupeUtilisateur)) {
            $this->groupeUtilisateurs[] = $groupeUtilisateur;
            $groupeUtilisateur->setDernierMessageLu($this);
        }

        return $this;
    }

    public function removeGroupeUtilisateur(GroupeUtilisateur $groupeUtilisateur): self
    {
        if ($this->groupeUtilisateurs->removeElement($groupeUtilisateur)) {
            // set the owning side to null (unless already changed)
            if ($groupeUtilisateur->getDernierMessageLu() === $this) {
                $groupeUtilisateur->setDernierMessageLu(null);
            }
        }

        return $this;
    }

    public function getInfosMessageLuPar() {
        $luPar = [];
        foreach ($this->getGroupe()->getUtilisateursDernierMessageLu() as $utilisateurMessage) {
            if ($utilisateurMessage['utilisateur'] != $this->getUtilisateur()) {
                if ($utilisateurMessage['idMessage'] >= $this->getId())
                    $luPar[] = $utilisateurMessage['utilisateur']->getNomComplet();
            }
        }
        return $luPar;
    }

}
