<?php
declare(strict_types=1);

namespace Uhura\Grossmarkt\ViewHelpers\Resource;

use GeorgRinger\News\Domain\Model\Dto\NewsDemand;
use GeorgRinger\News\Domain\Repository\NewsRepository;
use GeorgRinger\News\Service\CategoryService;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\ContainerInterface;
use Psr\Container\NotFoundExceptionInterface;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;

class CountNewsByCategoryViewHelper extends AbstractViewHelper
{

    public static function getContainer(): ContainerInterface
    {
        return GeneralUtility::getContainer();
    }

    /**
     * initialize arguments
     */
    public function initializeArguments(): void
    {
        $this->registerArgument('pid', 'string', 'PID', false, 0);
        $this->registerArgument('category', '\GeorgRinger\News\Domain\Model\Category', 'Category', true, null);
    }

    /**
     *
     * @param array $arguments
     * @param \Closure $renderChildrenClosure
     * @param RenderingContextInterface $renderingContext
     * @return int
     * @throws ContainerExceptionInterface
     * @throws NotFoundExceptionInterface
     */
    public static function renderStatic(
        array $arguments,
        \Closure $renderChildrenClosure,
        RenderingContextInterface $renderingContext
    ): int
    {

		/** @var NewsRepository $newsRepository */
        $newsRepository = self::getContainer()->get(NewsRepository::class);
		$query = $newsRepository->createQuery();
		$query->getQuerySettings()->setRespectStoragePage(false);
		$query->matching(
			$query->contains('categories', array($arguments['category']))
		);

        return $query->execute()->count();
    }
}