<?php

declare(strict_types=1);

/*
 * Chill is a software for social workers
 *
 * For the full copyright and license information, please view
 * the LICENSE file that was distributed with this source code.
 */

namespace Chill\EventBundle\Entity;

use Chill\EventBundle\Repository\EventThemeRepository;
use Chill\MainBundle\Entity\Embeddable\CommentEmbeddable;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;

#[ORM\Entity(repositoryClass: EventThemeRepository::class)]
#[ORM\Table(name: 'chill_event_budget_element')]
class EventBudgetElement
{
    #[ORM\Column(name: 'id', type: Types::INTEGER)]
    #[ORM\Id]
    #[ORM\GeneratedValue(strategy: 'AUTO')]
    private ?int $id = null;

    #[Assert\GreaterThan(value: 0)]
    #[Assert\NotNull(message: 'The amount cannot be empty')]
    #[ORM\Column(name: 'amount', type: Types::DECIMAL, precision: 10, scale: 2)]
    private string $amount;

    #[ORM\Embedded(class: CommentEmbeddable::class, columnPrefix: 'comment_budget_element_')]
    private ?CommentEmbeddable $comment = null;

    #[ORM\ManyToOne(targetEntity: Event::class)]
    private Event $event;

    #[ORM\ManyToOne(targetEntity: EventBudgetKind::class, inversedBy: 'EventBudgetElement')]
    #[ORM\JoinColumn]
    private EventBudgetKind $kind;

    /* Getters and Setters */

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

    public function setId(?int $id): void
    {
        $this->id = $id;
    }

    public function getAmount(): float
    {
        return (float) $this->amount;
    }

    public function getComment(): ?CommentEmbeddable
    {
        return $this->comment;
    }

    public function getEvent(): Event
    {
        return $this->event;
    }

    public function getKind(): EventBudgetKind
    {
        return $this->kind;
    }

    public function setAmount(string $amount): self
    {
        $this->amount = $amount;

        return $this;
    }

    public function setComment(?CommentEmbeddable $comment = null): self
    {
        $this->comment = $comment;

        return $this;
    }

    public function setEvent(Event $event): self
    {
        $this->event = $event;

        return $this;
    }

    public function setKind(EventBudgetKind $kind): self
    {
        $this->kind = $kind;

        return $this;
    }
}
