<?php

declare(strict_types=1);

namespace App\Entity\Awin;

use ApiPlatform\Metadata\ApiResource;
use Doctrine\ORM\Mapping as ORM;

/**
 * Produit / Évènement pour le portail fourni par le partenaire Awin.
 */
#[ApiResource(operations: [])]
#[ORM\Entity]
#[ORM\Table(name: 'AwinProduct')]
#[ORM\Index(name: 'name_idx', columns: ['name'])]
#[ORM\Index(name: 'slug_idx', columns: ['slug'])]
class Product
{
    #[ORM\Id]
    #[ORM\Column]
    #[ORM\GeneratedValue]
    private int $id;

    #[ORM\Column]
    protected mixed $slug;

    #[ORM\Column]
    protected mixed $name;

    #[ORM\Column(length: 255, options: ['nullable' => true])]
    protected string $description;

    #[ORM\Column]
    protected mixed $categoryCode;

    #[ORM\Column]
    protected mixed $subCategory;

    /**
     * @var array<string>
     */
    #[ORM\Column(type: 'json', options: ['nullable' => true])]
    protected array $categories;

    #[ORM\Column]
    protected mixed $datetimeStart;

    #[ORM\Column]
    protected mixed $datetimeEnd;

    /**
     * @var array<string>
     */
    #[ORM\Column(type: 'json', options: ['nullable' => true])]
    protected array $meetingSchedule;

    #[ORM\Column]
    protected mixed $placeCode;

    #[ORM\Column]
    protected mixed $place;

    #[ORM\Column]
    protected mixed $streetAddress;

    #[ORM\Column]
    protected mixed $postalCode;

    #[ORM\Column]
    protected mixed $city;

    #[ORM\Column]
    protected mixed $country;

    #[ORM\Column]
    protected mixed $latitude;

    #[ORM\Column]
    protected mixed $longitude;

    #[ORM\Column]
    protected mixed $mediumimage;

    #[ORM\Column]
    protected mixed $largeimage;

    #[ORM\Column(length: 255, options: ['nullable' => true])]
    protected string $deepLink;

    #[ORM\Column]
    protected mixed $priceMini;

    #[ORM\Column]
    protected mixed $priceMaxi;

    #[ORM\Column(length: 255, nullable: true)]
    protected ?string $artists;

    #[ORM\Column(length: 255, nullable: true)]
    protected ?string $uuid;

    #[ORM\Column(type: 'date', nullable: true)]
    protected ?\DateTimeInterface $createDate;

    #[ORM\Column(type: 'date', nullable: true)]
    protected ?\DateTimeInterface $updateDate;

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

    public function setId(int $id): self
    {
        $this->id = $id;

        return $this;
    }

    public function getSlug(): mixed
    {
        return $this->slug;
    }

    public function setSlug(mixed $slug): self
    {
        $this->slug = $slug;

        return $this;
    }

    public function getName(): mixed
    {
        return $this->name;
    }

    public function setName(mixed $name): self
    {
        $this->name = $name;

        return $this;
    }

    public function getDescription(): string
    {
        return $this->description;
    }

    public function setDescription(string $description): self
    {
        $this->description = $description;

        return $this;
    }

    public function getCategoryCode(): mixed
    {
        return $this->categoryCode;
    }

    public function setCategoryCode(mixed $categoryCode): self
    {
        $this->categoryCode = $categoryCode;

        return $this;
    }

    public function getSubCategory(): mixed
    {
        return $this->subCategory;
    }

    public function setSubCategory(mixed $subCategory): self
    {
        $this->subCategory = $subCategory;

        return $this;
    }

    /**
     * @return string[]
     */
    public function getCategories(): array
    {
        return $this->categories;
    }

    /**
     * @param string[] $categories
     */
    public function setCategories(array $categories): self
    {
        $this->categories = $categories;

        return $this;
    }

    public function getDatetimeStart(): mixed
    {
        return $this->datetimeStart;
    }

    public function setDatetimeStart(mixed $datetimeStart): self
    {
        $this->datetimeStart = $datetimeStart;

        return $this;
    }

    public function getDatetimeEnd(): mixed
    {
        return $this->datetimeEnd;
    }

    public function setDatetimeEnd(mixed $datetimeEnd): self
    {
        $this->datetimeEnd = $datetimeEnd;

        return $this;
    }

    /**
     * @return string[]
     */
    public function getMeetingSchedule(): array
    {
        return $this->meetingSchedule;
    }

    /**
     * @param array<string> $meetingSchedule
     *
     * @return $this
     */
    public function setMeetingSchedule(array $meetingSchedule): self
    {
        $this->meetingSchedule = $meetingSchedule;

        return $this;
    }

    public function getPlaceCode(): mixed
    {
        return $this->placeCode;
    }

    public function setPlaceCode(mixed $placeCode): self
    {
        $this->placeCode = $placeCode;

        return $this;
    }

    public function getPlace(): mixed
    {
        return $this->place;
    }

    public function setPlace(mixed $place): self
    {
        $this->place = $place;

        return $this;
    }

    public function getStreetAddress(): mixed
    {
        return $this->streetAddress;
    }

    public function setStreetAddress(mixed $streetAddress): self
    {
        $this->streetAddress = $streetAddress;

        return $this;
    }

    public function getPostalCode(): mixed
    {
        return $this->postalCode;
    }

    public function setPostalCode(mixed $postalCode): self
    {
        $this->postalCode = $postalCode;

        return $this;
    }

    public function getCity(): mixed
    {
        return $this->city;
    }

    public function setCity(mixed $city): self
    {
        $this->city = $city;

        return $this;
    }

    public function getCountry(): mixed
    {
        return $this->country;
    }

    public function setCountry(mixed $country): self
    {
        $this->country = $country;

        return $this;
    }

    public function getLatitude(): mixed
    {
        return $this->latitude;
    }

    public function setLatitude(mixed $latitude): self
    {
        $this->latitude = $latitude;

        return $this;
    }

    public function getLongitude(): mixed
    {
        return $this->longitude;
    }

    public function setLongitude(mixed $longitude): self
    {
        $this->longitude = $longitude;

        return $this;
    }

    public function getMediumimage(): mixed
    {
        return $this->mediumimage;
    }

    public function setMediumimage(mixed $mediumimage): self
    {
        $this->mediumimage = $mediumimage;

        return $this;
    }

    public function getLargeimage(): mixed
    {
        return $this->largeimage;
    }

    public function setLargeimage(mixed $largeimage): self
    {
        $this->largeimage = $largeimage;

        return $this;
    }

    public function getDeepLink(): string
    {
        return $this->deepLink;
    }

    public function setDeepLink(string $deepLink): self
    {
        $this->deepLink = $deepLink;

        return $this;
    }

    public function getPriceMini(): mixed
    {
        return $this->priceMini;
    }

    public function setPriceMini(mixed $priceMini): self
    {
        $this->priceMini = $priceMini;

        return $this;
    }

    public function getPriceMaxi(): mixed
    {
        return $this->priceMaxi;
    }

    public function setPriceMaxi(mixed $priceMaxi): self
    {
        $this->priceMaxi = $priceMaxi;

        return $this;
    }

    public function getArtists(): string
    {
        return $this->artists;
    }

    public function setArtists(string $artists): self
    {
        $this->artists = $artists;

        return $this;
    }

    public function getUuid(): string
    {
        return $this->uuid;
    }

    public function setUuid(string $uuid): self
    {
        $this->uuid = $uuid;

        return $this;
    }

    public function getCreateDate(): \DateTimeInterface
    {
        return $this->createDate;
    }

    public function setCreateDate(\DateTimeInterface $createDate): self
    {
        $this->createDate = $createDate;

        return $this;
    }

    public function getUpdateDate(): \DateTimeInterface
    {
        return $this->updateDate;
    }

    public function setUpdateDate(\DateTimeInterface $updateDate): self
    {
        $this->updateDate = $updateDate;

        return $this;
    }
}
