<?php
namespace Medienreaktor\Products\Provider;

use FluidTYPO3\Flux\Provider\AbstractProvider;
use FluidTYPO3\Flux\Provider\ProviderInterface;
use FluidTYPO3\Flux\View\TemplatePaths;
use Medienreaktor\Products\Domain\Model\Product;
use Medienreaktor\Products\Domain\Model\ProductGroup;
use Medienreaktor\Products\Domain\Model\Property;
use Medienreaktor\Products\Domain\Repository\ProductRepository;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Extbase\Utility\DebuggerUtility;

/**
 */
class ProductConfigurationProvider extends AbstractProvider implements ProviderInterface
{


    /**
     * productRepository
     *
     * @var \Medienreaktor\Products\Domain\Repository\ProductRepository
     */
    protected $productRepository = null;

    public function __construct()
    {
        $this->productRepository = GeneralUtility::makeInstance(ProductRepository::class);

        $this->tableName = 'tx_products_domain_model_product';
        $this->fieldName = 'pi_flexform';
    }

    /**
     * @param array $row
     * @param string|null $forField
     * @return \FluidTYPO3\Flux\Form|NULL
     */
    public function getForm(array $row, ?string $forField = null): ?\FluidTYPO3\Flux\Form
    {
        $form = \FluidTYPO3\Flux\Form::create();
        $form->setName('dynamicProperties');

        /** @var Product $product */
        $product = $this->productRepository->findByUid($row['uid']);

        if ($product) {
            $productGroup = $product->getProductGroup();

            if($productGroup) {
                $dynamicProperties = $productGroup->getDynamicProperties();

                /** @var ProductGroup $group */
                foreach($productGroup->getPropertyGroups() as $group) {
                    if ($group) {

                        unset($sheet);
                        $sheet = $form->createContainer('Sheet', $group->getUid(), $group->getName());

                        /** @var Property $property */
                        foreach($group->getProperties() as $property) {
                            unset($field);
                            $name = $property->getName();
//                            if ($dynamicProperties[$property->getUid()]) {
//                                $name .= ' ('.$dynamicProperties[$property->getUid()].')';
//                            }
                            if (in_array($property->getType(), ["unit", "unit-range"]) && (!empty($property->getUnitPrefix()) || !empty($property->getUnitSuffix()))) {
                                $name .= " (" . $property->getUnitPrefix(). "xxx.xx" . $property->getUnitSuffix() . ")";
                            }

                            $field = $form->createField('Input', $property->getUid(), $name);

                            $config = [
                                "eval" => "trim"
                            ];
                            if (in_array($property->getType(), ["unit", "unit-range"])) {
                                $config["eval"] = $config["eval"].",double2";
                            }
                            $field->setConfig($config);

                            $field->setExclude(false);
                            $sheet->add($field);

                            if ($property->getType() === "unit-range") {
                                $field2 = $form->createField('Input', $property->getUid()."-2", $name." bis");
                                $field2->setConfig($config);
                                $field2->setExclude(false);
                                $sheet->add($field2);
                            }
                        }

                        $form->add($sheet);
                    }
                }
            }
        }

        return $form;
    }


}
