<?php

namespace KupShop\GraphQLBundle\ApiAdmin\Types\Catalog\Product\Input;

use KupShop\GraphQLBundle\Contracts\AbstractDataType;
use TheCodingMachine\GraphQLite\Annotations\Field;
use TheCodingMachine\GraphQLite\Annotations\Input;

/**
 * @Input
 */
class VariationModify
{
    /**
     * ID. Vyplňuje se pouze v případě aktualizace, pokud chceme založit nový produkt, tak ID nevyplňujeme.
     *
     * @Field
     */
    public ?int $id;

    /**
     * ID produktu.
     *
     * @Field
     */
    public ?int $productId;

    /**
     * Kód.
     *
     * @Field
     */
    public ?string $code;

    /**
     * EAN.
     *
     * @Field
     */
    public ?string $ean;

    /**
     * Počet kusů skladem.
     *
     * @Field
     */
    public ?float $inStore;

    /**
     * Jmenovka a hodnota varianty, kterou je potřeba vyplnit při vytváření varianty.
     *
     * @Field()
     *
     * @var VariationLabelInput[]|null
     */
    public ?array $labels;

    /**
     * @Field
     */
    public ?string $title;

    /**
     * Cena.
     *
     * @Field
     */
    public ?PriceModify $price;

    /**
     * Viditelnost.
     *
     * @Field
     */
    public ?bool $visible;

    #[Field(description: 'Id výchozí dostupnosti zboží.')]
    public ?int $deliveryTimeId;

    /**
     * Váha.
     *
     * @Field
     */
    public ?float $weight;

    /**
     * Obrázky varianty.
     *
     * @Field
     *
     * @var PhotoModify[]|null
     */
    public ?array $photos = [];

    #[Field(inputType: 'VariationDataInput')]
    public ?AbstractDataType $data = null;

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

    public function getCode(): ?string
    {
        return $this->code;
    }

    public function getProductId(): ?int
    {
        return $this->productId;
    }

    public function getEan(): ?int
    {
        return $this->ean;
    }

    public function getInStore(): ?float
    {
        return $this->inStore;
    }

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

    public function getPrice(): ?PriceModify
    {
        return $this->price;
    }

    public function getVisible(): ?string
    {
        if (!is_null($this->visible)) {
            return $this->visible ? 'Y' : 'N';
        }

        return null;
    }

    public function getWeight(): ?float
    {
        return $this->weight;
    }

    /**
     * @return PhotoModify[]|null
     */
    public function getPhotos(): ?array
    {
        return $this->photos;
    }

    public function getDeliveryTimeId(): ?int
    {
        return $this->deliveryTimeId;
    }
}
