<?php
namespace Wga\Core\ViewHelpers\Get;

use TYPO3\CMS\Core\Http\ApplicationType;
use TYPO3\CMS\Core\Http\Request;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Core\Utility\RootlineUtility;
use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer;
use TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController;
use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;
use TYPO3\CMS\Core\Database\ConnectionPool;
use Wga\Core\Utility\FrontendUtility;
use Wga\Core\Utility\ObjectUtility;

/**
 * Class PageModeViewHelper
 * @package Wga\Core\ViewHelpers
 */
class PageModeViewHelper extends AbstractViewHelper
{
    /**
     * @return mixed|string|void
     */
    public function render()
    {
        if (isset($GLOBALS['TYPO3_REQUEST']) && ApplicationType::fromRequest($GLOBALS['TYPO3_REQUEST'])->isBackend()) {
            if (FrontendUtility::getArguments('edit') && array_key_exists('tt_content', FrontendUtility::getArguments('edit'))) {
                $contentUids = FrontendUtility::getArguments('edit')['tt_content'];
            }
            if (isset($contentUids) && !empty($contentUids) && is_array($contentUids)) {
                foreach ($contentUids as $key => $contentUid) {
                    $contentUid = $key;
                }
            }
            if (isset($contentUid) && !empty($contentUid)) {
                $page = $this->getElementPid($contentUid);
            }
            if (isset($page) && !empty($page)) {
                $rootLines = GeneralUtility::makeInstance(RootlineUtility::class, $page)->get();
                $rootLine = $rootLines[count($rootLines) - 1];
                if (stripos($rootLine['tx_fed_page_controller_action'], 'home') !== false) {
                    return 'HomePage';
                }
            }
        } else {
			$container = GeneralUtility::getContainer();
			$configurationManager = $container->get('TYPO3\\CMS\\Extbase\\Configuration\\ConfigurationManager');
			$extbaseFrameworkConfiguration = $configurationManager->getConfiguration(\TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface::CONFIGURATION_TYPE_FULL_TYPOSCRIPT);

			if (!isset($GLOBALS['pageMode'])) {
                $GLOBALS['pageMode'] = '';
            }

            if ($GLOBALS['pageMode']) {
                return $GLOBALS['pageMode'];
				// @extensionScannerIgnoreLine
            } elseif (isset( $GLOBALS['TSFE'] ) && $GLOBALS['TSFE'] instanceof TypoScriptFrontendController && ($GLOBALS['TSFE']->getSite()->getRootPageId() == $GLOBALS['TSFE']->id || $GLOBALS['TSFE']->getSite()->getRootPageId() == $GLOBALS['TSFE']->id - 1)) {
				return 'HomePage';
				// @extensionScannerIgnoreLine
            } elseif (isset($extbaseFrameworkConfiguration['plugin.']) && isset($extbaseFrameworkConfiguration['plugin.']['tx_wgatheme.']['settings.']['searchPage']) && isset( $GLOBALS['TSFE'] ) && $GLOBALS['TSFE']->id == intval($extbaseFrameworkConfiguration['plugin.']['tx_wgatheme.']['settings.']['searchPage']) ) {
				return 'SearchPage';
			} else {
                return 'StandardPage';
            }
        }
    }

    /**
     * @param int $contentUid
     * @return int|void
     */
    public function getElementPid($contentUid)
    {
        $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable('fe_users')->createQueryBuilder();
        return $queryBuilder->select('pid')
            ->from('tt_content')
            ->where(
                $queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($contentUid))
            )
            ->execute()
            ->fetchOne();
    }

}
