<?php

namespace Wga\Core\XClass;

use TYPO3\CMS\Core\TypoScript\TypoScriptService;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Frontend\DataProcessing\GalleryProcessor as CoreGalleryProcessor;
use TYPO3\CMS\Extbase\Configuration\BackendConfigurationManager;

/**
 * Class GalleryProcessor
 */
class GalleryProcessor extends CoreGalleryProcessor
{

    /**
     * @var TypoScriptService
     */
    protected $typoScriptService;

    /**
     * GalleryProcessor constructor.
     */
    public function __construct()
    {
        $this->typoScriptService = GeneralUtility::makeInstance(TypoScriptService::class);
        $newAvailableGalleryPositions = $this->getConfigurationFromTyposcript();
        if ($newAvailableGalleryPositions) {
            $this->availableGalleryPositions = array_merge_recursive(
                $this->availableGalleryPositions,
                $newAvailableGalleryPositions
            );
        }
    }

    /**
     * @return array|false
     */
    public function getConfigurationFromTyposcript()
    {
        $backendConfigurationManager = GeneralUtility::makeInstance(BackendConfigurationManager::class);
        $setup = $backendConfigurationManager->getTypoScriptSetup();
        if (isset($setup['dataProcessing.']['availableGalleryPositions.'])) {
            $newAvailableGalleryPositions = $this->typoScriptService->convertTypoScriptArrayToPlainArray(
                $setup['dataProcessing.']['availableGalleryPositions.']
            );
            $newArray = [];
            foreach ($newAvailableGalleryPositions as $kkey => $items) {
                foreach ($items as $key => $values) {
                    foreach ($values as $value) {
                        $newArray[$kkey][$key][] = (integer)$value;
                    }
                }
            }
            return $newArray;
        }
        return false;
    }
}
