<?php

declare(strict_types=1);

namespace Xentral\Modules\SystemConfig;

use Xentral\Core\DependencyInjection\ContainerInterface;
use Xentral\Modules\SystemConfig\Gateway\SystemConfigGateway;
use Xentral\Modules\SystemConfig\Helper\SystemConfigHelper;
use Xentral\Modules\SystemConfig\Service\SystemConfigService;

final class Bootstrap
{
    /**
     * @return array
     */
    public static function registerServices(): array
    {
        return [
            'SystemConfigModule' => 'onInitSystemConfigModule',
        ];
    }

    /**
     * @param ContainerInterface $container
     *
     * @return SystemConfigService
     */
    public static function onInitSystemConfigModule(ContainerInterface $container): SystemConfigModule
    {
        return new SystemConfigModule(
            self::onInitSystemConfigService($container),
            self::onInitSystemConfigGateway($container)
        );
    }

    /**
     * @param ContainerInterface $container
     *
     * @return SystemConfigService
     */
    private static function onInitSystemConfigService(ContainerInterface $container): SystemConfigService
    {
        return new SystemConfigService(
            self::onInitSystemConfigGateway($container),
            $container->get('Database'),
            self::onInitSystemConfigHelper()
        );
    }

    /**
     * @param ContainerInterface $container
     *
     * @return SystemConfigGateway
     */
    private static function onInitSystemConfigGateway(ContainerInterface $container): SystemConfigGateway
    {
        return new SystemConfigGateway(
            $container->get('Database'),
            self::onInitSystemConfigHelper()
        );
    }

    /**
     * @return SystemConfigHelper
     */
    private static function onInitSystemConfigHelper(): SystemConfigHelper
    {
        return new SystemConfigHelper();
    }
}