<?php

/**
 * Joomla! Content Management System
 *
 * @copyright   (C) 2023 Open Source Matters, Inc. <https://www.joomla.org>
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

namespace Joomla\CMS\Service\Provider;

use Joomla\CMS\Input\Input as CMSInput;
use Joomla\DI\Container;
use Joomla\DI\ServiceProviderInterface;

/**
 * Service provider for the the Joomla Input object.
 *
 * Whilst generally speaking it's an anti-pattern for the request object to be in a DIC, in the case of Joomla whilst
 * there, both the web application class and session class have a hard dependency on the input object, as a result it's
 * required that this exists in the DIC for now. Strategically there should be a long term plan to remove this from the
 * DIC.
 *
 * @note It is strongly recommended that extensions get the input object from the application and DO NOT use this
 * service container.
 *
 * @since  5.0.0
 */
class Input implements ServiceProviderInterface
{
    /**
     * Registers the service provider with a DI container.
     *
     * @param   Container  $container  The DI container.
     *
     * @return  void
     *
     * @since   5.0.0
     */
    public function register(Container $container)
    {
        $container->share(
            CMSInput::class,
            function () {
                return new CMSInput();
            },
            true
        );
    }
}
