<?php

namespace Zab\ZabSite\ViewHelpers;

use TYPO3\CMS\Core\Database\Connection;
use TYPO3\CMS\Core\Database\ConnectionPool;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;

/**
 * Returns true if the given page contains a content element of the given CType.
 *
 * Usage: <f:if condition="{zab:pageHasBlock(pageId: row.page_id, block: 'zab_faqslist')}">
 *        <f:if condition="{zab:pageHasBlock(pageId: row.page_id, block: 'zab_infohublist')}">
 */
class PageHasBlockViewHelper extends AbstractViewHelper
{
    public function initializeArguments(): void
    {
        $this->registerArgument('pageId', 'int', 'The page ID to check', true);
        $this->registerArgument('block', 'string', 'The CType to look for (e.g. zab_faqslist)', true);
    }

    public function render(): bool
    {
        $pageId = (int)$this->arguments['pageId'];
        $block  = (string)$this->arguments['block'];

        $connectionPool = GeneralUtility::makeInstance(ConnectionPool::class);
        $queryBuilder = $connectionPool->getQueryBuilderForTable('tt_content');

        $count = $queryBuilder
            ->count('uid')
            ->from('tt_content')
            ->where(
                $queryBuilder->expr()->eq('pid', $queryBuilder->createNamedParameter($pageId, Connection::PARAM_INT)),
                $queryBuilder->expr()->eq('CType', $queryBuilder->createNamedParameter($block)),
                $queryBuilder->expr()->eq('deleted', 0),
                $queryBuilder->expr()->eq('hidden', 0)
            )
            ->executeQuery()
            ->fetchOne();

        return (int)$count > 0;
    }
}
