<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="App\Repository\DirectionRepository")
 */
class Direction
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=32)
     */
    private $code;

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

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Ministry", inversedBy="directions")
     * @ORM\JoinColumn(nullable=false)
     */
    private $ministry;

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Commune", inversedBy="directions")
     * @ORM\JoinColumn(nullable=false)
     */
    private $commune;

    /**
     * @ORM\Column(type="json", nullable=true)
     */
    private $years = [];

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

    public function getCode(): ?string
    {
        return $this->code;
    }

    public function setCode(string $code): self
    {
        $this->code = $code;

        return $this;
    }

    public function getName(): ?string
    {
        return $this->name;
    }

    public function setName(string $name): self
    {
        $this->name = $name;

        return $this;
    }

    public function getMinistry(): ?Ministry
    {
        return $this->ministry;
    }

    public function setMinistry(?Ministry $ministry): self
    {
        $this->ministry = $ministry;

        return $this;
    }

    public function getCommune(): ?Commune
    {
        return $this->commune;
    }

    public function setCommune(?Commune $commune): self
    {
        $this->commune = $commune;

        return $this;
    }

    public function getYears(): array
    {
        $years = $this->years;
        
        return array_unique($years);
    }

    public function setYears(array $years): self
    {
        $this->years = $years;

        return $this;
    }

    public function hasYear($year)
    {
        return in_array($year, $this->getYears());
    }

    public function addYear($year)
    {
        if (!in_array($year, $this->years, true)) {
            $this->years[] = $year;
        }

        return $this;
    }

    public function removeYear($year)
    {
        if (false !== $key = array_search($year, $this->years, true)) {
            unset($this->years[$key]);
            $this->years = array_values($this->years);
        }

        return $this;
    }

    public function checkAccess($ministry)
    {
        $directions = $ministry->getDirections();
        if (!$directions or !$directions->contains($this)) {
            return false; 
        }
        
        return true;
    }
}
