<?php

declare(strict_types=1);

namespace App\Module\Integration\Domain\Entity;

use App\Module\Integration\Infrastructure\Doctrine\DoctrineTaskBookStackLinkRepository;
use App\Shared\Domain\Contract\TaskInterface;
use DateTimeImmutable;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;

#[ORM\Entity(repositoryClass: DoctrineTaskBookStackLinkRepository::class)]
#[ORM\UniqueConstraint(name: 'UNIQ_task_bookstack_link', columns: ['task_id', 'bookstack_id', 'bookstack_type'])]
class TaskBookStackLink
{
    #[ORM\Id]
    #[ORM\GeneratedValue]
    #[ORM\Column]
    private ?int $id = null;

    #[ORM\ManyToOne(targetEntity: TaskInterface::class)]
    #[ORM\JoinColumn(nullable: false, onDelete: 'CASCADE')]
    private TaskInterface $task;

    #[ORM\Column]
    private int $bookstackId;

    #[ORM\Column(length: 10)]
    private string $bookstackType;

    #[ORM\Column(length: 255)]
    private string $title;

    #[ORM\Column(length: 500)]
    #[Assert\Url]
    private string $url;

    #[ORM\Column]
    private DateTimeImmutable $createdAt;

    public function __construct()
    {
        $this->createdAt = new DateTimeImmutable();
    }

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

    public function getTask(): TaskInterface
    {
        return $this->task;
    }

    public function setTask(TaskInterface $task): static
    {
        $this->task = $task;

        return $this;
    }

    public function getBookstackId(): int
    {
        return $this->bookstackId;
    }

    public function setBookstackId(int $bookstackId): static
    {
        $this->bookstackId = $bookstackId;

        return $this;
    }

    public function getBookstackType(): string
    {
        return $this->bookstackType;
    }

    public function setBookstackType(string $bookstackType): static
    {
        $this->bookstackType = $bookstackType;

        return $this;
    }

    public function getTitle(): string
    {
        return $this->title;
    }

    public function setTitle(string $title): static
    {
        $this->title = $title;

        return $this;
    }

    public function getUrl(): string
    {
        return $this->url;
    }

    public function setUrl(string $url): static
    {
        $this->url = $url;

        return $this;
    }

    public function getCreatedAt(): DateTimeImmutable
    {
        return $this->createdAt;
    }
}
