<?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\Demodata\Command\DemodataCommand">
            <argument type="service" id="Shopware\Core\Framework\Demodata\DemodataService"/>
            <argument type="service" id="event_dispatcher" />
            <argument>%kernel.environment%</argument>

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

        <service id="Shopware\Core\Framework\Demodata\DemodataService">
            <argument type="tagged_iterator" tag="shopware.demodata_generator" />
            <argument>%kernel.project_dir%</argument>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>
        </service>

        <!-- Generators -->
        <service id="Shopware\Core\Framework\Demodata\Generator\RuleGenerator">
            <argument type="service" id="rule.repository" />
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Write\EntityWriter" />
            <argument type="service" id="payment_method.repository"/>
            <argument type="service" id="shipping_method.repository"/>
            <argument type="service" id="Shopware\Core\Content\Rule\RuleDefinition"/>

            <tag name="shopware.demodata_generator" option-name="rules" option-default="25"/>
        </service>

        <service id="Shopware\Core\Framework\Demodata\Generator\CustomerGenerator">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Write\EntityWriter" />
            <argument type="service" id="Doctrine\DBAL\Connection" />
            <argument type="service" id="customer_group.repository" />
            <argument type="service" id="Shopware\Core\System\NumberRange\ValueGenerator\NumberRangeValueGeneratorInterface" />
            <argument type="service" id="Shopware\Core\Checkout\Customer\CustomerDefinition"/>

            <tag name="shopware.demodata_generator" option-name="customers" option-default="60"/>
        </service>

        <service id="Shopware\Core\Framework\Demodata\Generator\PropertyGroupGenerator">
            <argument type="service" id="property_group.repository" />

            <tag name="shopware.demodata_generator" option-name="properties" option-default="10" option-description="Property group count (option count rand(30-300))"/>
        </service>

        <service id="Shopware\Core\Framework\Demodata\Generator\CategoryGenerator">
            <argument type="service" id="category.repository"/>
            <argument type="service" id="cms_page.repository"/>
            <argument type="service" id="Doctrine\DBAL\Connection" />

            <tag name="shopware.demodata_generator" option-name="categories" option-default="10"/>
        </service>

        <service id="Shopware\Core\Framework\Demodata\Generator\ProductManufacturerGenerator">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Write\EntityWriter" />
            <argument type="service" id="Shopware\Core\Content\Product\Aggregate\ProductManufacturer\ProductManufacturerDefinition" />

            <tag name="shopware.demodata_generator" option-name="manufacturers" option-default="60"/>
        </service>

        <service id="Shopware\Core\Framework\Demodata\Generator\TagGenerator">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Write\EntityWriter" />
            <argument type="service" id="Shopware\Core\System\Tag\TagDefinition" />

            <tag name="shopware.demodata_generator" option-name="tags" option-default="50"/>
        </service>

        <service id="Shopware\Core\Framework\Demodata\Generator\ProductReviewGenerator">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Write\EntityWriter" />
            <argument type="service" id="Shopware\Core\Content\Product\Aggregate\ProductReview\ProductReviewDefinition"/>
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="Shopware\Core\Checkout\Customer\Service\ProductReviewCountService"/>

            <tag name="shopware.demodata_generator" option-name="reviews" option-default="20"/>
        </service>

        <service id="Shopware\Core\Framework\Demodata\Generator\ProductGenerator">
            <argument type="service" id="Doctrine\DBAL\Connection" />
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Indexing\InheritanceUpdater"/>
            <argument type="service" id="Shopware\Core\Content\Product\DataAbstractionLayer\StatesUpdater"/>

            <tag name="shopware.demodata_generator" option-name="products" option-default="1000"/>
        </service>

        <service id="Shopware\Core\Framework\Demodata\Generator\PromotionGenerator">
            <argument type="service" id="Doctrine\DBAL\Connection" />
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>

            <tag name="shopware.demodata_generator" option-name="promotions" option-default="50"/>
        </service>

        <service id="Shopware\Core\Framework\Demodata\Generator\FlowGenerator">
            <argument type="service" id="Doctrine\DBAL\Connection" />
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>
            <argument type="service" id="Shopware\Core\Framework\Event\BusinessEventCollector"/>
            <argument type="service" id="Shopware\Core\Content\Flow\Api\FlowActionCollector"/>
            <tag name="shopware.demodata_generator" option-name="flows" option-default="0"/>
        </service>

        <service id="Shopware\Core\Framework\Demodata\Generator\MediaGenerator">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Write\EntityWriter" />
            <argument type="service" id="Shopware\Core\Content\Media\File\FileSaver" />
            <argument type="service" id="Shopware\Core\Content\Media\File\FileNameProvider" />
            <argument type="service" id="media_default_folder.repository" />
            <argument type="service" id="media_folder.repository" />
            <argument type="service" id="Shopware\Core\Content\Media\MediaDefinition"/>
            <argument type="service" id="Doctrine\DBAL\Connection" />

            <tag name="shopware.demodata_generator" option-name="media" option-default="300"/>
        </service>

        <service id="Shopware\Core\Framework\Demodata\Generator\ProductStreamGenerator">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Write\EntityWriter" />
            <argument type="service" id="Shopware\Core\Content\ProductStream\ProductStreamDefinition" />

            <tag name="shopware.demodata_generator" option-name="product-streams" option-default="10"/>
        </service>

        <service id="Shopware\Core\Framework\Demodata\Generator\OrderGenerator">
            <argument type="service" id="Doctrine\DBAL\Connection" />
            <argument type="service" id="Shopware\Core\System\SalesChannel\Context\SalesChannelContextFactory" />
            <argument type="service" id="Shopware\Core\Checkout\Cart\SalesChannel\CartService" />
            <argument type="service" id="Shopware\Core\Checkout\Cart\Order\OrderConverter" />
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Write\EntityWriter" />
            <argument type="service" id="Shopware\Core\Checkout\Order\OrderDefinition" />
            <argument type="service" id="Shopware\Core\Checkout\Cart\CartCalculator"/>
            <tag name="shopware.demodata_generator" option-name="orders" option-default="60"/>
        </service>

        <service id="Shopware\Core\Framework\Demodata\Generator\CustomFieldGenerator">
            <argument type="service" id="custom_field_set.repository"/>
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>

            <tag name="shopware.demodata_generator" option-name="attribute-sets" option-default="4" option-description="CustomField set count"/>
        </service>

        <service id="Shopware\Core\Framework\Demodata\Generator\MailTemplateGenerator">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Write\EntityWriter" />
            <argument type="service" id="mail_template_type.repository" />
            <argument type="service" id="Shopware\Core\Content\MailTemplate\MailTemplateDefinition" />

            <tag name="shopware.demodata_generator" option-name="mail-template" option-default="10"/>
        </service>

        <service id="Shopware\Core\Framework\Demodata\Generator\MailHeaderFooterGenerator">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Write\EntityWriter" />
            <argument type="service" id="Shopware\Core\Content\MailTemplate\Aggregate\MailHeaderFooter\MailHeaderFooterDefinition" />

            <tag name="shopware.demodata_generator" option-name="mail-header-footer" option-default="3" option-description="Mail header/footer count"/>
        </service>

        <service id="Shopware\Core\Framework\Demodata\Generator\UserGenerator">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Write\EntityWriter" />
            <argument type="service" id="Shopware\Core\System\User\UserDefinition" />
            <argument type="service" id="language.repository" />

            <tag name="shopware.demodata_generator" option-name="users" option-default="0"/>
        </service>
    </services>
</container>
