<?php

declare(strict_types=1);

namespace Zab\ZabSite\DataProcessing;

use TYPO3\CMS\ContentBlocks\DataProcessing\ContentBlockData;
use TYPO3\CMS\Core\Database\ConnectionPool;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer;
use TYPO3\CMS\Frontend\ContentObject\DataProcessorInterface;

final class KlaroContextualConsentProcessor implements DataProcessorInterface
{
    public function process(
        ContentObjectRenderer $cObj,
        array $contentObjectConfiguration,
        array $processorConfiguration,
        array $processedData,
    ): array {
        $contentData = $processedData['data'] ?? null;
        $serviceUid = 0;

        if ($contentData instanceof ContentBlockData) {
            $serviceUid = (int)($contentData->toArray()['tx_klaroconsentmanager_service'] ?? 0);
        } elseif (is_array($contentData)) {
            $serviceUid = (int)($contentData['tx_klaroconsentmanager_service'] ?? 0);
        }

        if ($serviceUid <= 0) {
            return $processedData;
        }

        $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
            ->getQueryBuilderForTable('tx_klaroconsentmanager_service');
        $service = $queryBuilder
            ->select('*')
            ->from('tx_klaroconsentmanager_service')
            ->where($queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($serviceUid)))
            ->executeQuery()
            ->fetchAssociative();

        if ($service !== false) {
            $processedData['contextualconsentService'] = [
                ['data' => $service],
            ];
        }

        return $processedData;
    }
}
