<?php

namespace App\Entity;

use App\Enums\ReferralServiceType;
use App\Repository\StaffNoteRepository;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;

#[ORM\Entity(repositoryClass: StaffNoteRepository::class)]
class StaffNote
{
    #[ORM\Id]
    #[ORM\GeneratedValue]
    #[ORM\Column]
    private ?int $id = null;

    #[ORM\Column(type: Types::DATE_MUTABLE)]
    private ?\DateTimeInterface $date = null;

    #[ORM\ManyToOne(inversedBy: 'staffNotes')]
    #[ORM\JoinColumn(nullable: false)]
    private ?MemberCase $memberCase = null;

    #[ORM\Column(type: Types::SIMPLE_ARRAY, enumType: ReferralServiceType::class)]
    private array $servicesProvided = [];

    #[ORM\Column(type: Types::TEXT)]
    private ?string $note = null;

    #[ORM\Column(length: 500, nullable: true)]
    private ?string $recommendations = null;

    #[ORM\Column(type: Types::DATETIME_MUTABLE, nullable: true)]
    private ?\DateTimeInterface $workerSignDatetime = null;

    #[ORM\Column(type: Types::DATETIME_MUTABLE, nullable: true)]
    private ?\DateTimeInterface $supervisorSignDateTime = null;

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

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

    public function setDate(\DateTimeInterface $date): static
    {
        $this->date = $date;

        return $this;
    }

    public function getMemberCase(): ?MemberCase
    {
        return $this->memberCase;
    }

    public function setMemberCase(?MemberCase $memberCase): static
    {
        $this->memberCase = $memberCase;

        return $this;
    }

    /**
     * @return ReferralServiceType[]
     */
    public function getServicesProvided(): array
    {
        return $this->servicesProvided;
    }

    public function setServicesProvided(array $servicesProvided): static
    {
        $this->servicesProvided = $servicesProvided;

        return $this;
    }

    public function getNote(): ?string
    {
        return $this->note;
    }

    public function setNote(string $note): static
    {
        $this->note = $note;

        return $this;
    }

    public function getRecommendations(): ?string
    {
        return $this->recommendations;
    }

    public function setRecommendations(string $recommendations): static
    {
        $this->recommendations = $recommendations;

        return $this;
    }

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

    public function setWorkerSignDatetime(?\DateTimeInterface $workerSignDatetime): static
    {
        $this->workerSignDatetime = $workerSignDatetime;

        return $this;
    }

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

    public function setSupervisorSignDateTime(?\DateTimeInterface $supervisorSignDateTime): static
    {
        $this->supervisorSignDateTime = $supervisorSignDateTime;

        return $this;
    }
}
