<?php
namespace Wga\Core\Event;

use Psr\Container\ContainerInterface;
use Psr\EventDispatcher\StoppableEventInterface;
use TYPO3\CMS\Core\Utility\GeneralUtility;

/**
 * Class RegisterAutoloaderEvent.
 */
class RegisterAutoloaderEvent implements StoppableEventInterface
{
    /**
     * @param ContainerInterface $container
     * @throws \Psr\Container\ContainerExceptionInterface
     * @throws \Psr\Container\NotFoundExceptionInterface
     */
    public function __construct(ContainerInterface $container)
    {
        spl_autoload_register([$this, 'loadClass'], true, true);
    }

    /**
     * @return bool
     */
    public function isPropagationStopped(): bool
    {
        return true;
    }

    /**
     * @param string $className
     * @return bool
     */
    public function loadClass(string $className): bool
    {
        $return = false;

        if ($this->classHasPath($className)) {
            $classPath = $this->getPathForClass($className);
            if (file_exists($classPath)) {
                require_once $classPath;
                $return = true;
            }
        }

        return $return;
    }

    /**
     * @param $className
     * @return mixed
     */
    protected function getPathForClass($className)
    {
        return GeneralUtility::getFileAbsFileName(
            $GLOBALS['TYPO3_CONF_VARS']['SYS']['Objects'][$className]['classPath']
        );
    }

    /**
     * @param $className
     * @return bool
     */
    protected function classHasPath($className)
    {
        return !empty($GLOBALS['TYPO3_CONF_VARS']['SYS']['Objects'][$className]['classPath']);
    }
}
