<?php

namespace Uhura\Grossmarkt\ViewHelpers\Categories;

use Doctrine\DBAL\Exception;
use TYPO3\CMS\Core\Database\ConnectionPool;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;

/**
 * Class RootViewHelper
 * To prepare startingPoints values for flux:field with type="category".
 */
class RootViewHelper extends AbstractViewHelper
{
    /**
     * @return void
     */
    public function initializeArguments()
    {
        $this->registerArgument('pid', 'int', 'PID', false, 0);
    }

    /**
     * @inheritDoc
     * @throws Exception
     */
    public static function renderStatic(
        array $arguments,
        \Closure $renderChildrenClosure,
        RenderingContextInterface $renderingContext
    ) {
        $pid = (int)$arguments['pid'];

        /** @var ConnectionPool $connectionPool */
        $connectionPool = GeneralUtility::makeInstance(ConnectionPool::class);
        $queryBuilder = $connectionPool->getQueryBuilderForTable('sys_category');

        $queryBuilder->select('*')
            ->from('sys_category')
            ->where(
                $queryBuilder->expr()->eq('parent', 0),
            );
		
        if ($pid > 0) {
            $queryBuilder->andWhere(
                $queryBuilder->expr()->eq('pid', $pid),
            );
        }
		
        $categories = $queryBuilder->executeQuery()->fetchAllAssociative();
        if (is_array($categories)) {
            $categories = array_column($categories, 'uid');
            return implode(',', $categories);
        }

        return '';
    }
}
