<?php

declare(strict_types=1);

namespace App\Entity\Message;

use App\Entity\Access\Access;
use App\Entity\Organization\Organization;
use App\Enum\Message\ReportMessageStatusEnum;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;

/**
 * TODO: documenter.
 */
#[ORM\MappedSuperclass]
#[ORM\Table(name: 'ReportMessage')]
abstract class AbstractReport
{
    #[ORM\Id]
    #[ORM\Column]
    #[ORM\GeneratedValue]
    protected ?int $id = null;

    #[ORM\Column(type: 'datetime', nullable: true)]
    protected ?\DatetimeInterface $dateSend;

    #[ORM\Column(length: 50, enumType: ReportMessageStatusEnum::class)]
    protected ReportMessageStatusEnum $status;

    #[ORM\ManyToOne(targetEntity: Access::class, inversedBy: 'reports')]
    protected ?Access $access;

    #[ORM\ManyToOne(targetEntity: Organization::class, inversedBy: 'reports')]
    protected ?Organization $organization;

    /**
     * @deprecated Ne sert qu'à la rétrocompatibilité avec la V1, pourra être supprimé une fois la migration terminée
     */
    #[ORM\Column(length: 255)]
    private string $recipientType = '(ap2i)';

    /**
     * @deprecated Ne sert qu'à la rétrocompatibilité avec la V1, pourra être supprimé une fois la migration terminée
     */
    #[ORM\Column(type: Types::INTEGER)]
    private int $recipientId = 0;

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

    public function getDateSend(): ?\DatetimeInterface
    {
        return $this->dateSend;
    }

    public function setDateSend(?\DatetimeInterface $dateSend): self
    {
        $this->dateSend = $dateSend;

        return $this;
    }

    public function getStatus(): ReportMessageStatusEnum
    {
        return $this->status;
    }

    public function setStatus(ReportMessageStatusEnum $status): self
    {
        $this->status = $status;

        return $this;
    }

    public function getAccess(): ?Access
    {
        return $this->access;
    }

    public function setAccess(?Access $access): self
    {
        $this->access = $access;

        return $this;
    }

    public function getOrganization(): ?Organization
    {
        return $this->organization;
    }

    public function setOrganization(?Organization $organization): self
    {
        $this->organization = $organization;

        return $this;
    }

    /**
     * @deprecated Ne sert qu'à la rétrocompatibilité avec la V1, pourra être supprimé une fois la migration terminée
     */
    public function getRecipientType(): string
    {
        return $this->recipientType;
    }

    /**
     * @deprecated Ne sert qu'à la rétrocompatibilité avec la V1, pourra être supprimé une fois la migration terminée
     */
    public function setRecipientType(string $recipientType): void
    {
        $this->recipientType = $recipientType;
    }

    /**
     * @deprecated Ne sert qu'à la rétrocompatibilité avec la V1, pourra être supprimé une fois la migration terminée
     */
    public function getRecipientId(): int
    {
        return $this->recipientId;
    }

    /**
     * @deprecated Ne sert qu'à la rétrocompatibilité avec la V1, pourra être supprimé une fois la migration terminée
     */
    public function setRecipientId(int $recipientId): void
    {
        $this->recipientId = $recipientId;
    }
}
