<?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\Checkout\Document\DocumentDefinition">
            <tag name="shopware.entity.definition"/>
            <tag name="shopware.entity.hookable"/>
        </service>

        <service id="Shopware\Core\Checkout\Document\Aggregate\DocumentType\DocumentTypeDefinition">
            <tag name="shopware.entity.definition"/>
        </service>

        <service id="Shopware\Core\Checkout\Document\Aggregate\DocumentTypeTranslation\DocumentTypeTranslationDefinition">
            <tag name="shopware.entity.definition"/>
        </service>

        <service id="Shopware\Core\Checkout\Document\Aggregate\DocumentBaseConfig\DocumentBaseConfigDefinition">
            <tag name="shopware.entity.definition"/>
        </service>

        <service id="Shopware\Core\Checkout\Document\Aggregate\DocumentBaseConfigSalesChannel\DocumentBaseConfigSalesChannelDefinition">
            <tag name="shopware.entity.definition"/>
        </service>

        <service id="Shopware\Core\Checkout\Document\Twig\DocumentTemplateRenderer">
            <argument type="service" id="Shopware\Core\Framework\Adapter\Twig\TemplateFinder"/>
            <argument type="service" id="twig"/>
            <argument type="service" id="Shopware\Core\Framework\Adapter\Translation\Translator"/>
            <argument type="service" id="Shopware\Core\System\SalesChannel\Context\SalesChannelContextFactory"/>
            <argument type="service" id="event_dispatcher"/>
        </service>

        <service id="Shopware\Core\Checkout\Document\DocumentGeneratorController" public="true">
            <argument type="service" id="Shopware\Core\Checkout\Document\Service\DocumentGenerator"/>
            <argument type="service" id="serializer"/>
            <argument type="service" id="Shopware\Core\Framework\Validation\DataValidator" />

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

        <service id="pdf.merger" class="setasign\Fpdi\Tfpdf\Fpdi" />

        <service id="Shopware\Core\Checkout\Document\Service\DocumentConfigLoader">
            <argument type="service" id="document_base_config.repository"/>
            <argument type="service" id="country.repository"/>

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

        <service id="Shopware\Core\Checkout\Document\Service\ReferenceInvoiceLoader">
            <argument type="service" id="Doctrine\DBAL\Connection" />
        </service>

        <service id="Shopware\Core\Checkout\Document\Renderer\InvoiceRenderer">
            <argument type="service" id="order.repository"/>
            <argument type="service" id="Shopware\Core\Checkout\Document\Service\DocumentConfigLoader"/>
            <argument type="service" id="event_dispatcher"/>
            <argument type="service" id="Shopware\Core\System\NumberRange\ValueGenerator\NumberRangeValueGeneratorInterface"/>
            <argument type="service" id="Doctrine\DBAL\Connection" />
            <argument type="service" id="Shopware\Core\Checkout\Document\Service\DocumentFileRendererRegistry" />
            <argument type="service" id="validator" />

            <tag name="document.renderer"/>
        </service>

        <service id="Shopware\Core\Checkout\Document\Renderer\DeliveryNoteRenderer">
            <argument type="service" id="order.repository"/>
            <argument type="service" id="Shopware\Core\Checkout\Document\Service\DocumentConfigLoader"/>
            <argument type="service" id="event_dispatcher"/>
            <argument type="service" id="Shopware\Core\System\NumberRange\ValueGenerator\NumberRangeValueGeneratorInterface"/>
            <argument type="service" id="Doctrine\DBAL\Connection" />
            <argument type="service" id="Shopware\Core\Checkout\Document\Service\DocumentFileRendererRegistry" />

            <tag name="document.renderer"/>
        </service>

        <service id="Shopware\Core\Checkout\Document\Renderer\StornoRenderer">
            <argument type="service" id="order.repository"/>
            <argument type="service" id="Shopware\Core\Checkout\Document\Service\DocumentConfigLoader"/>
            <argument type="service" id="event_dispatcher"/>
            <argument type="service" id="Shopware\Core\System\NumberRange\ValueGenerator\NumberRangeValueGeneratorInterface"/>
            <argument type="service" id="Shopware\Core\Checkout\Document\Service\ReferenceInvoiceLoader" />
            <argument type="service" id="Doctrine\DBAL\Connection" />
            <argument type="service" id="Shopware\Core\Checkout\Document\Service\DocumentFileRendererRegistry" />
            <argument type="service" id="validator" />

            <tag name="document.renderer"/>
        </service>

        <service id="Shopware\Core\Checkout\Document\Renderer\CreditNoteRenderer">
            <argument type="service" id="order.repository"/>
            <argument type="service" id="Shopware\Core\Checkout\Document\Service\DocumentConfigLoader"/>
            <argument type="service" id="event_dispatcher"/>
            <argument type="service" id="Shopware\Core\System\NumberRange\ValueGenerator\NumberRangeValueGeneratorInterface"/>
            <argument type="service" id="Shopware\Core\Checkout\Document\Service\ReferenceInvoiceLoader" />
            <argument type="service" id="Doctrine\DBAL\Connection" />
            <argument type="service" id="Shopware\Core\Checkout\Document\Service\DocumentFileRendererRegistry" />
            <argument type="service" id="validator" />

            <tag name="document.renderer"/>
        </service>

        <service id="Shopware\Core\Checkout\Document\Renderer\DocumentRendererRegistry">
            <argument type="tagged_iterator" tag="document.renderer"/>
        </service>

        <service id="Shopware\Core\Checkout\Document\Service\PdfRenderer">
            <argument>%shopware.dompdf.options%</argument>
            <argument type="service" id="Shopware\Core\Checkout\Document\Twig\DocumentTemplateRenderer"/>
            <argument>%kernel.project_dir%</argument>
            <argument type="service" id="Shopware\Core\Framework\Extensions\ExtensionDispatcher"/>

            <tag name="document_type.renderer" key="pdf"/>
        </service>

        <service id="Shopware\Core\Checkout\Document\Service\DocumentGenerator">
            <argument type="service" id="Shopware\Core\Checkout\Document\Renderer\DocumentRendererRegistry" />
            <argument type="service" id="Shopware\Core\Checkout\Document\Service\DocumentFileRendererRegistry" />
            <argument type="service" id="Shopware\Core\Content\Media\MediaService" />
            <argument type="service" id="document.repository" />
            <argument type="service" id="Doctrine\DBAL\Connection" />
        </service>

        <service id="Shopware\Core\Checkout\Document\Service\DocumentMerger">
            <argument type="service" id="document.repository" />
            <argument type="service" id="Shopware\Core\Content\Media\MediaService" />
            <argument type="service" id="Shopware\Core\Checkout\Document\Service\DocumentGenerator" />
            <argument type="service" id="pdf.merger" />
            <argument type="service" id="Symfony\Component\Filesystem\Filesystem"/>
        </service>

        <service id="Shopware\Core\Checkout\Document\Controller\DocumentController" public="true">
            <argument type="service" id="Shopware\Core\Checkout\Document\Service\DocumentGenerator"/>
            <argument type="service" id="Shopware\Core\Checkout\Document\Service\DocumentMerger"/>

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

        <service id="Shopware\Core\Checkout\Document\SalesChannel\DocumentRoute" public="true">
            <argument type="service" id="Shopware\Core\Checkout\Document\Service\DocumentGenerator"/>
            <argument type="service" id="document.repository" />
        </service>

        <service id="Shopware\Core\Checkout\Document\Service\HtmlRenderer">
            <argument type="service" id="Shopware\Core\Checkout\Document\Twig\DocumentTemplateRenderer"/>
            <argument>%kernel.project_dir%</argument>
            <argument type="service" id="Shopware\Core\Framework\Extensions\ExtensionDispatcher"/>

            <tag name="document_type.renderer" key="html"/>
        </service>

        <service id="Shopware\Core\Checkout\Document\Service\DocumentFileRendererRegistry">
            <argument type="tagged_iterator" tag="document_type.renderer" index-by="key"/>
        </service>

        <service id="Shopware\Core\Checkout\Document\Renderer\ZugferdRenderer">
            <argument type="service" id="order.repository"/>
            <argument type="service" id="Doctrine\DBAL\Connection" />
            <argument type="service" id="Shopware\Core\Checkout\Document\Zugferd\ZugferdBuilder"/>
            <argument type="service" id="event_dispatcher"/>
            <argument type="service" id="Shopware\Core\Checkout\Document\Service\DocumentConfigLoader"/>
            <argument type="service" id="Shopware\Core\System\NumberRange\ValueGenerator\NumberRangeValueGeneratorInterface"/>

            <tag name="document.renderer"/>
        </service>

        <service id="Shopware\Core\Checkout\Document\Renderer\ZugferdEmbeddedRenderer">
            <argument type="service" id="Shopware\Core\Checkout\Document\Renderer\InvoiceRenderer" />
            <argument type="service" id="Shopware\Core\Checkout\Document\Renderer\ZugferdRenderer"/>
            <argument>%kernel.shopware_version%</argument>

            <tag name="document.renderer"/>
        </service>

        <service id="Shopware\Core\Checkout\Document\Zugferd\ZugferdBuilder">
            <argument type="service" id="event_dispatcher"/>
            <argument type="service" id="Shopware\Core\Checkout\Cart\Price\AmountCalculator"/>
        </service>
    </services>
</container>
