<?xml version="1.0" ?>

<container xmlns="http://symfony.com/schema/dic/services"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
    <services>
        <service id="Shopware\Core\Content\Sitemap\Service\SitemapExporter">
            <argument type="tagged_iterator" tag="shopware.sitemap_url_provider"/>
            <argument type="service" id="cache.system"/>
            <argument>%shopware.sitemap.batchsize%</argument>
            <argument type="service" id="shopware.filesystem.sitemap"/>
            <argument type="service" id="Shopware\Core\Content\Sitemap\Service\SitemapHandleFactoryInterface"/>
            <argument type="service" id="event_dispatcher"/>
            <argument type="service" id="Shopware\Core\Checkout\Cart\CartRuleLoader"/>
        </service>

        <service id="Shopware\Core\Content\Sitemap\Service\SitemapLister">
            <argument type="service" id="shopware.filesystem.sitemap"/>
            <argument type="service" id="shopware.asset.sitemap"/>
        </service>

        <service id="Shopware\Core\Content\Sitemap\Service\ConfigHandler">
            <argument type="tagged_iterator" tag="shopware.sitemap.config_handler"/>
        </service>

        <service id="Shopware\Core\Content\Sitemap\Service\SitemapHandleFactoryInterface" class="Shopware\Core\Content\Sitemap\Service\SitemapHandleFactory">
            <argument type="service" id="event_dispatcher"/>
        </service>

        <service id="Shopware\Core\Content\Sitemap\SalesChannel\SitemapRoute" public="true">
            <argument type="service" id="Shopware\Core\Content\Sitemap\Service\SitemapLister"/>
            <argument type="service" id="Shopware\Core\System\SystemConfig\SystemConfigService"/>
            <argument type="service" id="Shopware\Core\Content\Sitemap\Service\SitemapExporter"/>
            <argument type="service" id="Shopware\Core\Framework\Adapter\Cache\CacheTagCollector"/>
        </service>

        <service id="Shopware\Core\Content\Sitemap\SalesChannel\SitemapFileRoute" public="true">
            <argument type="service" id="shopware.filesystem.sitemap"/>
            <argument type="service" id="Shopware\Core\Framework\Extensions\ExtensionDispatcher"/>
        </service>

        <!-- UrlProviders -->
        <service id="Shopware\Core\Content\Sitemap\Provider\HomeUrlProvider">
            <tag name="shopware.sitemap_url_provider"/>
        </service>

        <service id="Shopware\Core\Content\Sitemap\Provider\CategoryUrlProvider">
            <argument type="service" id="Shopware\Core\Content\Sitemap\Service\ConfigHandler"/>
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="Shopware\Core\Content\Category\CategoryDefinition"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\Common\IteratorFactory"/>
            <argument type="service" id="router"/>
            <argument type="service" id="event_dispatcher"/>

            <tag name="shopware.sitemap_url_provider"/>
        </service>

        <service id="Shopware\Core\Content\Sitemap\Provider\CustomUrlProvider">
            <argument type="service" id="Shopware\Core\Content\Sitemap\Service\ConfigHandler"/>

            <tag name="shopware.sitemap_url_provider"/>
        </service>

        <service id="Shopware\Core\Content\Sitemap\Provider\ProductUrlProvider">
            <argument type="service" id="Shopware\Core\Content\Sitemap\Service\ConfigHandler"/>
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="Shopware\Core\Content\Product\ProductDefinition"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\Common\IteratorFactory"/>
            <argument type="service" id="router"/>
            <argument type="service" id="Shopware\Core\System\SystemConfig\SystemConfigService"/>

            <tag name="shopware.sitemap_url_provider"/>
        </service>

        <service id="Shopware\Core\Content\Sitemap\Provider\LandingPageUrlProvider">
            <argument type="service" id="Shopware\Core\Content\Sitemap\Service\ConfigHandler"/>
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="router"/>

            <tag name="shopware.sitemap_url_provider"/>
        </service>

        <!-- Config Handler -->
        <service id="Shopware\Core\Content\Sitemap\ConfigHandler\File">
            <argument>%shopware.sitemap%</argument>
            <tag name="shopware.sitemap.config_handler"/>
        </service>

        <!-- Commands -->
        <service id="Shopware\Core\Content\Sitemap\Commands\SitemapGenerateCommand">
            <argument type="service" id="sales_channel.repository"/>
            <argument type="service" id="Shopware\Core\Content\Sitemap\Service\SitemapExporter"/>
            <argument type="service" id="Shopware\Core\System\SalesChannel\Context\SalesChannelContextFactory"/>
            <argument type="service" id="event_dispatcher"/>

            <tag name="console.command"/>
        </service>

        <!-- scheduled task -->
        <service id="Shopware\Core\Content\Sitemap\ScheduledTask\SitemapGenerateTask">
            <tag name="shopware.scheduled.task"/>
        </service>

        <service id="Shopware\Core\Content\Sitemap\ScheduledTask\SitemapGenerateTaskHandler">
            <argument type="service" id="scheduled_task.repository"/>
            <argument type="service" id="logger"/>
            <argument type="service" id="sales_channel.repository"/>
            <argument type="service" id="Shopware\Core\System\SystemConfig\SystemConfigService"/>
            <argument type="service" id="messenger.default_bus"/>
            <argument type="service" id="event_dispatcher"/>

            <tag name="messenger.message_handler"/>
        </service>

        <service id="Shopware\Core\Content\Sitemap\ScheduledTask\SitemapMessageHandler">
            <argument type="service" id="Shopware\Core\System\SalesChannel\Context\SalesChannelContextFactory"/>
            <argument type="service" id="Shopware\Core\Content\Sitemap\Service\SitemapExporter"/>
            <argument type="service" id="logger"/>
            <argument type="service" id="Shopware\Core\System\SystemConfig\SystemConfigService"/>

            <tag name="messenger.message_handler"/>
        </service>
    </services>
</container>
