<?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\Framework\MessageQueue\ScheduledTask\ScheduledTaskDefinition">
            <tag name="shopware.entity.definition"/>
        </service>

        <service id="Shopware\Core\Framework\MessageQueue\ScheduledTask\Scheduler\TaskScheduler">
            <argument type="service" id="scheduled_task.repository"/>
            <argument type="service" id="messenger.default_bus"/>
            <argument type="service" id="parameter_bag"/>
        </service>

        <service id="Shopware\Core\Framework\MessageQueue\ScheduledTask\Registry\TaskRegistry">
            <argument type="tagged_iterator" tag="shopware.scheduled.task" />
            <argument type="service" id="scheduled_task.repository"/>
            <argument type="service" id="parameter_bag"/>
        </service>

        <service id="Shopware\Core\Framework\MessageQueue\ScheduledTask\SymfonyBridge\ScheduleProvider">
            <argument type="tagged_iterator" tag="shopware.scheduled.task" />
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="cache.object"/>
            <argument type="service" id="lock.factory"/>

            <tag name="scheduler.schedule_provider">
                <attribute name="name">shopware</attribute>
            </tag>
        </service>

        <service id="Shopware\Core\Framework\MessageQueue\ScheduledTask\MessageQueue\RegisterScheduledTaskHandler">
            <argument type="service" id="Shopware\Core\Framework\MessageQueue\ScheduledTask\Registry\TaskRegistry"/>

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

        <service id="Shopware\Core\Framework\MessageQueue\Subscriber\PluginLifecycleSubscriber">
            <argument type="service" id="Shopware\Core\Framework\MessageQueue\ScheduledTask\Registry\TaskRegistry"/>
            <argument type="service" id="cache.messenger.restart_workers_signal" />

            <tag name="kernel.event_subscriber"/>
        </service>

        <service id="Shopware\Core\Framework\MessageQueue\ScheduledTask\Scheduler\TaskRunner">
            <argument type="tagged_iterator" tag="messenger.message_handler"/>
            <argument type="service" id="scheduled_task.repository"/>
        </service>

        <service id="Shopware\Core\Framework\MessageQueue\Command\RegisterScheduledTasksCommand">
            <argument type="service" id="Shopware\Core\Framework\MessageQueue\ScheduledTask\Registry\TaskRegistry"/>

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

        <service id="Shopware\Core\Framework\MessageQueue\Command\ScheduledTaskRunner">
            <argument type="service" id="Shopware\Core\Framework\MessageQueue\ScheduledTask\Scheduler\TaskScheduler"/>
            <argument type="service" id="cache.messenger.restart_workers_signal" />

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

        <service id="Shopware\Core\Framework\MessageQueue\Command\ListScheduledTaskCommand">
            <argument type="service" id="Shopware\Core\Framework\MessageQueue\ScheduledTask\Registry\TaskRegistry"/>

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

        <service id="Shopware\Core\Framework\MessageQueue\Command\RunSingleScheduledTaskCommand">
            <argument type="service" id="Shopware\Core\Framework\MessageQueue\ScheduledTask\Scheduler\TaskRunner"/>

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

        <service id="Shopware\Core\Framework\MessageQueue\Command\DeactivateScheduledTaskCommand">
            <argument type="service" id="Shopware\Core\Framework\MessageQueue\ScheduledTask\Registry\TaskRegistry"/>

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

        <service id="Shopware\Core\Framework\MessageQueue\Command\ScheduleScheduledTaskCommand">
            <argument type="service" id="Shopware\Core\Framework\MessageQueue\ScheduledTask\Registry\TaskRegistry"/>

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

        <service id="Shopware\Core\Framework\MessageQueue\Api\ScheduledTaskController" public="true">
            <argument type="service" id="Shopware\Core\Framework\MessageQueue\ScheduledTask\Scheduler\TaskScheduler"/>
            <call method="setContainer">
                <argument type="service" id="service_container"/>
            </call>
        </service>

        <service id="Shopware\Core\Framework\MessageQueue\Subscriber\UpdatePostFinishSubscriber">
            <argument type="service" id="Shopware\Core\Framework\MessageQueue\ScheduledTask\Registry\TaskRegistry"/>
            <tag name="kernel.event_subscriber"/>
        </service>
    </services>
</container>
