<?php
#parse("PHP File Header.php")

declare(strict_types=1);

#if (${NAMESPACE})
namespace ${NAMESPACE};

#end

#set( $table = $NAME.replaceAll("([a-z])([A-Z]+)", "$1_$2").toLowerCase() )
#set( $EventClass = $NAME.replace("Image", "Event").replace("Cover", "Event") )

use BaksDev\Core\Entity\EntityEvent;
use BaksDev\Core\Entity\EntityState;
use BaksDev\Files\Resources\Upload\UploadEntityInterface;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
use InvalidArgumentException;
use Symfony\Component\Validator\Constraints as Assert;

/* ${NAME} */

interface ${NAME}Interface
{
    public function getName() : ?string;

	public function getExt() : ?string;

	public function getCdn() : bool;
}

#[ORM\Entity]
#[ORM\Table(name: '${table}')]
class ${NAME} extends EntityEvent implements UploadEntityInterface
{
    public const TABLE = '${table}';

    /** Связь на событие */
    #[Assert\NotBlank]
    #[ORM\Id]
    #[ORM\OneToOne(inversedBy: 'image', targetEntity: ${EventClass}::class)]
    #[ORM\JoinColumn(name: 'event', referencedColumnName: 'id')]
    private ${EventClass} ${DS}event;


    /** Свойство */
    //#[Assert\NotBlank]
    //#[ORM\Column(type: Types::STRING, length: 100)]
    //private string ${DS}name;


    public function __construct(${EventClass} ${DS}event)
    {
        ${DS}this->event = ${DS}event;
    }

    public function __toString(): string
    {
        return (string) ${DS}this->event;
    }

    public function getDto(${DS}dto) : mixed
    {
        if(${DS}dto instanceof ${NAME}Interface)
        {
            return parent::getDto(${DS}dto);
        }

        throw new InvalidArgumentException(sprintf('Class %s interface error', ${DS}dto::class));
    }


    public function setEntity(${DS}dto) : mixed
    {
        if(${DS}dto instanceof ${NAME}Interface)
        {
            return parent::setEntity(${DS}dto);
        }

        throw new InvalidArgumentException(sprintf('Class %s interface error', ${DS}dto::class));
    }
}