<?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="SwagMigrationAssistant\Migration\Logging\LoggingService">
            <argument type="service" id="swag_migration_logging.repository"/>
            <argument type="service" id="logger"/>

            <tag name="kernel.reset" method="reset"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\Media\MediaFileService">
            <argument type="service" id="swag_migration_media_file.repository"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Write\EntityWriter"/>
            <argument type="service" id="SwagMigrationAssistant\Migration\Media\SwagMigrationMediaFileDefinition"/>
            <argument type="service" id="SwagMigrationAssistant\Migration\Converter\ConverterRegistry"/>
            <argument type="service" id="logger"/>

            <tag name="kernel.reset" method="reset"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\Converter\Converter" abstract="true">
            <argument type="service" id="SwagMigrationAssistant\Migration\Mapping\MappingService"/>
            <argument type="service" id="SwagMigrationAssistant\Migration\Logging\LoggingService"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\Converter\ConverterRegistry">
            <argument type="tagged_iterator" tag="shopware.migration.converter"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\MigrationContextFactory">
            <argument type="service" id="SwagMigrationAssistant\Migration\Profile\ProfileRegistry"/>
            <argument type="service" id="SwagMigrationAssistant\Migration\Gateway\GatewayRegistry"/>
            <argument type="service" id="SwagMigrationAssistant\Migration\DataSelection\DataSet\DataSetRegistry"/>
            <argument type="service" id="swag_migration_general_setting.repository"/>
            <argument type="service" id="swag_migration_connection.repository"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\Mapping\MappingService">
            <argument type="service" id="swag_migration_mapping.repository"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Write\EntityWriter"/>
            <argument type="service" id="SwagMigrationAssistant\Migration\Mapping\SwagMigrationMappingDefinition"/>
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="logger"/>

            <tag name="kernel.reset" method="reset"/>
        </service>

        <!-- Shopware Lookup services -->
        <service id="SwagMigrationAssistant\Migration\Mapping\Lookup\CountryLookup">
            <argument type="service" id="country.repository"/>
            <tag name="kernel.reset" method="reset"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\Mapping\Lookup\CountryStateLookup">
            <argument type="service" id="country_state.repository"/>
            <tag name="kernel.reset" method="reset"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\Mapping\Lookup\CurrencyLookup">
            <argument type="service" id="currency.repository"/>
            <tag name="kernel.reset" method="reset"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\Mapping\Lookup\DefaultCmsPageLookup">
            <argument type="service" id="cms_page.repository"/>
            <tag name="kernel.reset" method="reset"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\Mapping\Lookup\DeliveryTimeLookup">
            <argument type="service" id="delivery_time.repository"/>
            <tag name="kernel.reset" method="reset"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\Mapping\Lookup\DocumentTypeLookup">
            <argument type="service" id="document_type.repository"/>
            <tag name="kernel.reset" method="reset"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\Mapping\Lookup\LanguageLookup">
            <argument type="service" id="language.repository"/>
            <argument type="service" id="SwagMigrationAssistant\Migration\Mapping\Lookup\LocaleLookup"/>
            <tag name="kernel.reset" method="reset"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\Mapping\Lookup\LocaleLookup">
            <argument type="service" id="locale.repository"/>
            <tag name="kernel.reset" method="reset"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\Mapping\Lookup\LowestRootCategoryLookup">
            <argument type="service" id="category.repository"/>
            <tag name="kernel.reset" method="reset"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\Mapping\Lookup\MediaDefaultFolderLookup">
            <argument type="service" id="media_default_folder.repository"/>
            <tag name="kernel.reset" method="reset"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\Mapping\Lookup\MediaThumbnailSizeLookup">
            <argument type="service" id="media_thumbnail_size.repository"/>
            <tag name="kernel.reset" method="reset"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\Mapping\Lookup\NumberRangeLookup">
            <argument type="service" id="number_range.repository"/>
            <tag name="kernel.reset" method="reset"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\Mapping\Lookup\SeoUrlTemplateLookup">
            <argument type="service" id="seo_url_template.repository"/>
            <tag name="kernel.reset" method="reset"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\Mapping\Lookup\TaxLookup">
            <argument type="service" id="tax.repository"/>
            <tag name="kernel.reset" method="reset"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\Mapping\Lookup\MailTemplateTypeLookup">
            <argument type="service" id="mail_template_type.repository"/>
            <tag name="kernel.reset" method="reset"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\Mapping\Lookup\SystemDefaultMailTemplateLookup">
            <argument type="service" id="mail_template.repository"/>
            <tag name="kernel.reset" method="reset"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\Mapping\Lookup\NumberRangeTypeLookup">
            <argument type="service" id="number_range_type.repository"/>
            <tag name="kernel.reset" method="reset"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\Mapping\Lookup\SalutationLookup">
            <argument type="service" id="salutation.repository"/>
            <tag name="kernel.reset" method="reset"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\Mapping\Lookup\StateMachineStateLookup">
            <argument type="service" id="state_machine_state.repository"/>
            <tag name="kernel.reset" method="reset"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\Mapping\Lookup\SystemConfigLookup">
            <argument type="service" id="system_config.repository"/>
            <tag name="kernel.reset" method="reset"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\Mapping\Lookup\GlobalDocumentBaseConfigLookup">
            <argument type="service" id="document_base_config.repository"/>
            <tag name="kernel.reset" method="reset"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\Mapping\Lookup\CmsPageLookup">
            <argument type="service" id="cms_page.repository"/>
            <tag name="kernel.reset" method="reset"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\Mapping\Lookup\TaxRuleLookup">
            <argument type="service" id="tax_rule.repository"/>
            <tag name="kernel.reset" method="reset"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\Mapping\Lookup\TaxRuleTypeLookup">
            <argument type="service" id="tax_rule_type.repository"/>
            <tag name="kernel.reset" method="reset"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\Mapping\Lookup\ProductSortingLookup">
            <argument type="service" id="product_sorting.repository"/>
            <tag name="kernel.reset" method="reset"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\Run\RunService">
            <argument type="service" id="swag_migration_run.repository"/>
            <argument type="service" id="swag_migration_connection.repository"/>
            <argument type="service" id="SwagMigrationAssistant\Migration\Service\MigrationDataFetcher"/>
            <argument type="service" id="SwagMigrationAssistant\Migration\DataSelection\DataSelectionRegistry"/>
            <argument type="service" id="sales_channel.repository"/>
            <argument type="service" id="theme.repository"/>
            <argument type="service" id="swag_migration_general_setting.repository"/>
            <argument type="service" id="Shopware\Storefront\Theme\ThemeService"/>
            <argument type="service" id="SwagMigrationAssistant\Migration\Mapping\MappingService"/>
            <argument type="service" id="SwagMigrationAssistant\Migration\Data\SwagMigrationDataDefinition"/>
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="SwagMigrationAssistant\Migration\Logging\LoggingService"/>
            <argument type="service" id="Shopware\Core\Framework\Store\Services\TrackingEventClient"/>
            <argument type="service" id="messenger.default_bus"/>
            <argument type="service" id="SwagMigrationAssistant\Migration\MigrationContextFactory"/>
            <argument type="service" id="SwagMigrationAssistant\Migration\Service\PremappingService"/>
            <argument type="service" id="SwagMigrationAssistant\Migration\Run\RunTransitionService"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\Run\RunTransitionService">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\History\HistoryService">
            <argument type="service" id="swag_migration_logging.repository"/>
            <argument type="service" id="swag_migration_run.repository"/>
            <argument type="service" id="Doctrine\DBAL\Connection"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\Service\MigrationDataFetcher"
                 public="true">
            <argument type="service" id="SwagMigrationAssistant\Migration\Gateway\GatewayRegistry"/>
            <argument type="service" id="SwagMigrationAssistant\Migration\Logging\LoggingService"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\Gateway\Reader\ReaderRegistry">
            <argument type="tagged_iterator" tag="shopware.migration.reader"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\Service\MigrationDataConverter" public="true">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Write\EntityWriter"/>
            <argument type="service" id="SwagMigrationAssistant\Migration\Converter\ConverterRegistry"/>
            <argument type="service" id="SwagMigrationAssistant\Migration\Media\MediaFileService"/>
            <argument type="service" id="SwagMigrationAssistant\Migration\Logging\LoggingService"/>
            <argument type="service" id="SwagMigrationAssistant\Migration\Data\SwagMigrationDataDefinition"/>
            <argument type="service" id="SwagMigrationAssistant\Migration\Mapping\MappingService"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\Service\MigrationDataWriter" public="true">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Write\EntityWriter"/>
            <argument type="service" id="swag_migration_data.repository"/>
            <argument type="service" id="SwagMigrationAssistant\Migration\Writer\WriterRegistry"/>
            <argument type="service" id="SwagMigrationAssistant\Migration\Media\MediaFileService"/>
            <argument type="service" id="SwagMigrationAssistant\Migration\Logging\LoggingService"/>
            <argument type="service" id="SwagMigrationAssistant\Migration\Data\SwagMigrationDataDefinition"/>
            <argument type="service" id="swag_migration_mapping.repository"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\Service\MediaFileProcessorService" public="true">
            <argument type="service" id="messenger.default_bus"/>
            <argument type="service" id="SwagMigrationAssistant\Migration\DataSelection\DataSet\DataSetRegistry"/>
            <argument type="service" id="SwagMigrationAssistant\Migration\Logging\LoggingService"/>
            <argument type="service" id="Doctrine\DBAL\Connection"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\Media\MediaFileProcessorRegistry">
            <argument type="tagged_iterator" tag="shopware.migration.media_file_processor"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\Media\Processor\HttpDownloadServiceBase" abstract="true">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="swag_migration_media_file.repository"/>
            <argument type="service" id="Shopware\Core\Content\Media\File\FileSaver"/>
            <argument type="service" id="SwagMigrationAssistant\Migration\Logging\LoggingService"/>
        </service>

        <service id="SwagMigrationAssistant\Controller\PremappingController" public="true">
            <argument type="service" id="SwagMigrationAssistant\Migration\Service\PremappingService"/>
            <argument type="service" id="SwagMigrationAssistant\Migration\MigrationContextFactory"/>

            <call method="setContainer">
                <argument type="service" id="service_container"/>
            </call>
        </service>

        <service id="SwagMigrationAssistant\Controller\StatusController" public="true">
            <argument type="service" id="SwagMigrationAssistant\Migration\Service\MigrationDataFetcher"/>
            <argument type="service" id="SwagMigrationAssistant\Migration\Run\RunService"/>
            <argument type="service" id="SwagMigrationAssistant\Migration\DataSelection\DataSelectionRegistry"/>
            <argument type="service" id="swag_migration_connection.repository"/>
            <argument type="service" id="SwagMigrationAssistant\Migration\Profile\ProfileRegistry"/>
            <argument type="service" id="SwagMigrationAssistant\Migration\Gateway\GatewayRegistry"/>
            <argument type="service" id="SwagMigrationAssistant\Migration\MigrationContextFactory"/>
            <argument type="service" id="swag_migration_general_setting.repository"/>

            <call method="setContainer">
                <argument type="service" id="service_container"/>
            </call>
        </service>

        <service id="SwagMigrationAssistant\Controller\HistoryController" public="true">
            <argument type="service" id="SwagMigrationAssistant\Migration\History\HistoryService"/>

            <call method="setContainer">
                <argument type="service" id="service_container"/>
            </call>
        </service>

        <service id="SwagMigrationAssistant\Command\StartMigrationCommand">
            <argument type="service" id="SwagMigrationAssistant\Migration\Run\RunService"/>
            <tag name="console.command"/>
        </service>

        <service id="SwagMigrationAssistant\Command\AbortMigrationCommand">
            <argument type="service" id="SwagMigrationAssistant\Migration\Run\RunService"/>
            <tag name="console.command"/>
        </service>

        <service id="SwagMigrationAssistant\Command\GetMigrationProgressCommand">
            <argument type="service" id="SwagMigrationAssistant\Migration\Run\RunService"/>
            <tag name="console.command"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\DataSelection\DataSelectionRegistry">
            <argument type="tagged_iterator" tag="shopware.migration.data_selection"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\DataSelection\DataSet\DataSetRegistry">
            <argument type="tagged_iterator" tag="shopware.migration.data_set"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\Premapping\PremappingReaderRegistry">
            <argument type="tagged_iterator" tag="shopware.migration.pre_mapping_reader"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\Service\PremappingService">
            <argument type="service" id="SwagMigrationAssistant\Migration\Premapping\PremappingReaderRegistry"/>
            <argument type="service" id="SwagMigrationAssistant\Migration\Mapping\MappingService"/>
            <argument type="service" id="swag_migration_mapping.repository"/>
            <argument type="service" id="swag_migration_connection.repository"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\MessageQueue\Handler\ProcessMediaHandler">
            <argument type="service" id="swag_migration_run.repository"/>
            <argument type="service" id="SwagMigrationAssistant\Migration\Media\MediaFileProcessorRegistry"/>
            <argument type="service" id="SwagMigrationAssistant\Migration\Logging\LoggingService"/>
            <argument type="service" id="SwagMigrationAssistant\Migration\MigrationContextFactory"/>
            <tag name="messenger.message_handler"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\MessageQueue\Handler\CleanupMigrationHandler">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="messenger.default_bus"/>
            <tag name="messenger.message_handler"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\MessageQueue\Handler\ThemeAssignHandler">
            <argument type="service" id="SwagMigrationAssistant\Migration\Run\RunService"/>
            <tag name="messenger.message_handler"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\MessageQueue\Handler\MigrationProcessHandler">
            <argument type="service" id="swag_migration_run.repository"/>
            <argument type="service" id="SwagMigrationAssistant\Migration\MigrationContextFactory"/>
            <argument type="service"
                      id="SwagMigrationAssistant\Migration\MessageQueue\Handler\MigrationProcessorRegistry"/>

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

        <service id="SwagMigrationAssistant\Migration\MessageQueue\OrderCountIndexer"
                 decorates="Shopware\Core\Checkout\Customer\DataAbstractionLayer\CustomerIndexer">
            <argument type="service" id="SwagMigrationAssistant\Migration\MessageQueue\OrderCountIndexer.inner"/>
            <argument type="service" id="Doctrine\DBAL\Connection"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\MessageQueue\Handler\MigrationProcessorRegistry">
            <argument type="tagged_iterator" tag="shopware.migration.processor"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\MessageQueue\Handler\Processor\AbstractProcessor" abstract="true">
            <argument id="swag_migration_run.repository" type="service"/>
            <argument id="swag_migration_data.repository" type="service"/>
            <argument id="swag_migration_media_file.repository" type="service"/>
            <argument id="SwagMigrationAssistant\Migration\Run\RunTransitionService" type="service"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\MessageQueue\Handler\Processor\FetchingProcessor"
                 parent="SwagMigrationAssistant\Migration\MessageQueue\Handler\Processor\AbstractProcessor">
            <argument id="SwagMigrationAssistant\Migration\Service\MigrationDataFetcher" type="service"/>
            <argument id="SwagMigrationAssistant\Migration\Service\MigrationDataConverter" type="service"/>
            <argument type="service" id="messenger.default_bus"/>

            <tag name="shopware.migration.processor"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\MessageQueue\Handler\Processor\WritingProcessor"
                 parent="SwagMigrationAssistant\Migration\MessageQueue\Handler\Processor\AbstractProcessor">
            <argument id="SwagMigrationAssistant\Migration\Service\MigrationDataWriter" type="service"/>
            <argument type="service" id="messenger.default_bus"/>

            <tag name="shopware.migration.processor"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\MessageQueue\Handler\Processor\AbortingProcessor"
                 parent="SwagMigrationAssistant\Migration\MessageQueue\Handler\Processor\AbstractProcessor">
            <argument id="SwagMigrationAssistant\Migration\Run\RunService" type="service"/>
            <argument type="service" id="messenger.default_bus"/>

            <tag name="shopware.migration.processor"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\MessageQueue\Handler\Processor\CleanUpProcessor"
                 parent="SwagMigrationAssistant\Migration\MessageQueue\Handler\Processor\AbstractProcessor">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="messenger.default_bus"/>

            <tag name="shopware.migration.processor"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\MessageQueue\Handler\Processor\IndexingProcessor"
                 parent="SwagMigrationAssistant\Migration\MessageQueue\Handler\Processor\AbstractProcessor">
            <argument type="service" id="cache.object"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Indexing\EntityIndexerRegistry"/>
            <argument type="service" id="messenger.default_bus"/>

            <tag name="shopware.migration.processor"/>
        </service>

        <service id="SwagMigrationAssistant\Migration\MessageQueue\Handler\Processor\MediaProcessingProcessor"
                 parent="SwagMigrationAssistant\Migration\MessageQueue\Handler\Processor\AbstractProcessor">
            <argument type="service" id="SwagMigrationAssistant\Migration\Service\MediaFileProcessorService"/>
            <argument type="service" id="messenger.default_bus"/>

            <tag name="shopware.migration.processor"/>
        </service>

        <service id="SwagMigrationAssistant\Core\Content\Product\Stock\StockStorageDecorator"
                 decorates="Shopware\Core\Content\Product\Stock\StockStorage">
            <argument type="service"
                      id="SwagMigrationAssistant\Core\Content\Product\Stock\StockStorageDecorator.inner"/>
        </service>
    </services>
</container>
