<?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="Kiener\MolliePayments\Service\OrderDeliveryService">
            <argument type="service" id="order_delivery.repository"/>
        </service>

        <service id="Kiener\MolliePayments\Service\MolliePaymentExtractor"/>

        <service id="Kiener\MolliePayments\Service\MollieApi\RequestAnonymizer\MollieRequestAnonymizer">
            <argument>*</argument>
        </service>


        <service id="Kiener\MolliePayments\Service\TokenAnonymizer"/>

        <service id="Kiener\MolliePayments\Service\Transition\TransitionService">
            <argument type="service" id="Shopware\Core\System\StateMachine\StateMachineRegistry"/>
        </service>

        <service id="Kiener\MolliePayments\Service\Transition\OrderTransitionService">
            <argument type="service" id="Kiener\MolliePayments\Service\Transition\TransitionService"/>
        </service>

        <service id="Kiener\MolliePayments\Service\Transition\DeliveryTransitionService">
            <argument type="service" id="Kiener\MolliePayments\Service\Transition\TransitionService"/>
            <argument type="service" id="monolog.logger.mollie"/>
        </service>

        <service id="Kiener\MolliePayments\Service\Transition\TransactionTransitionService" >
            <argument type="service" id="Kiener\MolliePayments\Service\Transition\TransitionService"/>
            <argument type="service" id="Shopware\Core\Checkout\Order\Aggregate\OrderTransaction\OrderTransactionStateHandler"/>
            <argument type="service" id="monolog.logger.mollie"/>
        </service>

        <service id="Kiener\MolliePayments\Service\Order\OrderStateService" >
            <argument type="service" id="monolog.logger.mollie"/>
            <argument type="service" id="Kiener\MolliePayments\Service\Transition\OrderTransitionService"/>
        </service>

        <service id="Kiener\MolliePayments\Service\OrderService">
            <argument type="service" id="order.repository"/>
            <argument type="service" id="Kiener\MolliePayments\Service\MollieApi\Order"/>
            <argument type="service" id="Kiener\MolliePayments\Service\UpdateOrderCustomFields"/>
            <argument type="service" id="Kiener\MolliePayments\Service\UpdateOrderTransactionCustomFields"/>
            <argument type="service" id="Kiener\MolliePayments\Service\OrderDeliveryService"/>
            <argument type="service" id="service_container"/>
            <argument type="service" id="monolog.logger.mollie"/>
        </service>




        <service id="Kiener\MolliePayments\Service\Refund\RefundCreditNoteService">
            <argument type="service" id="order.repository"/>
            <argument type="service" id="order_line_item.repository"/>
            <argument type="service" id="Kiener\MolliePayments\Service\SettingsService"/>
            <argument type="service" id="Shopware\Core\Checkout\Cart\Tax\TaxCalculator"/>
            <argument type="service" id="monolog.logger.mollie"/>
        </service>


        <service id="Kiener\MolliePayments\Service\Refund\RefundService">
            <argument type="service" id="Kiener\MolliePayments\Service\MollieApi\Order"/>
            <argument type="service" id="Kiener\MolliePayments\Service\OrderService"/>
            <argument type="service" id="Kiener\MolliePayments\Hydrator\RefundHydrator"/>
            <argument type="service" id="Kiener\MolliePayments\Gateway\Mollie\MollieGateway"/>
            <argument type="service" id="Kiener\MolliePayments\Service\Refund\CompositionMigrationService"/>
        </service>


        <service id="Kiener\MolliePayments\Service\Refund\CompositionMigrationService">
            <argument type="service" id="mollie_refund_item.repository"/>
        </service>


        <service id="Kiener\MolliePayments\Service\Stock\StockManager">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="service_container"/>
        </service>


        <service id="Kiener\MolliePayments\Service\MollieApi\OrderDataExtractor">
            <argument type="service" id="monolog.logger.mollie"/>
            <argument type="service" id="Kiener\MolliePayments\Service\CustomerService"/>
        </service>

        <service id="Kiener\MolliePayments\Service\MollieApi\OrderDeliveryExtractor">
            <argument type="service" id="monolog.logger.mollie"/>
        </service>

        <service id="Kiener\MolliePayments\Service\MollieApi\OrderItemsExtractor">
        </service>

        <service id="Kiener\MolliePayments\Service\UpdateOrderCustomFields">
            <argument type="service" id="order.repository"/>
        </service>

        <service id="Kiener\MolliePayments\Service\UpdateOrderTransactionCustomFields">
            <argument type="service" id="order_transaction.repository"/>
        </service>

        <service id="Kiener\MolliePayments\Service\Order\UpdateOrderLineItems">
            <argument type="service" id="order_line_item.repository"/>
        </service>

        <service id="Kiener\MolliePayments\Service\MollieApi\MollieOrderCustomerEnricher">
            <argument type="service" id="Kiener\MolliePayments\Service\CustomerService"/>
        </service>

        <service id="Kiener\MolliePayments\Service\MollieApi\PriceCalculator"/>

        <service id="Kiener\MolliePayments\Service\MollieApi\LineItemDataExtractor">
            <argument type="service" id="Kiener\MolliePayments\Service\UrlParsingService"/>
        </service>

        <service id="Kiener\MolliePayments\Service\Order\OrderTimeService">
            <argument type="service" id="monolog.logger.mollie"/>
        </service>

        <service id="Kiener\MolliePayments\Service\Order\OrderStatusUpdater">
            <argument type="service" id="Kiener\MolliePayments\Service\Order\OrderStateService"/>
            <argument type="service" id="order.repository"/>
            <argument type="service" id="Kiener\MolliePayments\Service\Transition\TransactionTransitionService"/>
            <argument type="service" id="state_machine_state.repository"/>
            <argument type="service" id="monolog.logger.mollie"/>
        </service>

        <service id="Kiener\MolliePayments\Service\CartService" public="true">
            <argument type="service" id="Shopware\Core\Checkout\Cart\SalesChannel\CartService"/>
            <argument type="service" id="Shopware\Core\System\SalesChannel\SalesChannel\SalesChannelContextSwitcher"/>
            <argument type="service" id="Shopware\Core\Checkout\Cart\LineItemFactoryHandler\ProductLineItemFactory"/>
            <argument type="service" id="Shopware\Core\System\SalesChannel\Context\SalesChannelContextService"/>
            <argument type="service" id="Kiener\MolliePayments\Components\ApplePayDirect\Services\ApplePayShippingAddressFaker"/>
        </service>

        <service id="Kiener\MolliePayments\Service\Cart\Voucher\VoucherService">
            <argument type="service" id="product.repository"/>
            <argument type="service" id="monolog.logger.mollie"/>
        </service>

        <service id="Kiener\MolliePayments\Service\Cart\Subscription\SubscriptionCartCollector">
            <tag name="shopware.cart.collector" priority="1999" />
            <argument type="service" id="event_dispatcher"/>
        </service>


        <service id="Kiener\MolliePayments\Service\Cart\Voucher\VoucherCartCollector">
            <argument type="service" id="Kiener\MolliePayments\Service\Cart\Voucher\VoucherService"/>
            <argument type="service" id="Kiener\MolliePayments\Repository\PaymentMethodRepository"/>
            <!-- // inject after product collector(5000) -->
            <tag name="shopware.cart.collector" priority="2000"/>
        </service>

        <service id="Kiener\MolliePayments\Hydrator\MollieLineItemHydrator">
            <argument type="service" id="Kiener\MolliePayments\Service\MollieApi\Builder\MollieOrderPriceBuilder"/>
        </service>

        <service id="Kiener\MolliePayments\Service\Payment\Provider\ActivePaymentMethodsProvider">
            <argument type="service" id="Kiener\MolliePayments\Factory\MollieApiFactory"/>
            <argument type="service" id="Kiener\MolliePayments\Service\MollieApi\Builder\MollieOrderPriceBuilder"/>
            <argument type="service" id="monolog.logger.mollie"/>
        </service>

        <service id="Kiener\MolliePayments\Service\SalesChannel\SalesChannelDataExtractor">
        </service>

        <service id="Kiener\MolliePayments\Service\MollieLocaleService">
            <argument type="service" id="language.repository"/>
        </service>

        <!-- Mail -->


        <service id="Kiener\MolliePayments\Service\Mail\AttachmentCollector">
            <argument type="tagged" tag="mollie_payments.mail.attachment_generator"/>
        </service>

        <service id="mollie_payments.mail.mollie_log_archive_generator" class="Kiener\MolliePayments\Service\Mail\AttachmentGenerator\LogFileArchiveGenerator">
            <argument>%kernel.logs_dir%</argument>
            <argument>mollie_</argument>
            <tag name="mollie_payments.mail.attachment_generator"/>
        </service>

        <service id="Kiener\MolliePayments\Service\Mail\AttachmentGenerator\ReadablePluginConfigurationGenerator">
            <argument type="service" id="Shopware\Core\System\SystemConfig\Service\ConfigurationService"/>
            <argument type="service" id="sales_channel.repository"/>
            <argument type="service" id="Kiener\MolliePayments\Service\SettingsService"/>
            <argument type="service" id="Kiener\MolliePayments\Service\MollieApi\ApiKeyValidator"/>

            <tag name="mollie_payments.mail.attachment_generator"/>
        </service>

        <service id="Kiener\MolliePayments\Service\Mail\AttachmentGenerator\JsonPluginConfigurationGenerator">
            <argument type="service" id="Shopware\Core\System\SystemConfig\Service\ConfigurationService"/>
            <argument type="service" id="sales_channel.repository"/>
            <argument type="service" id="Kiener\MolliePayments\Service\SettingsService"/>

            <tag name="mollie_payments.mail.attachment_generator"/>
        </service>

        <service id="Kiener\MolliePayments\Service\Mail\AttachmentGenerator\PaymentMethodGenerator">
            <argument type="service" id="sales_channel.repository"/>
            <argument type="service" id="Kiener\MolliePayments\Factory\MollieApiFactory"/>
            <argument type="service" id="Kiener\MolliePayments\Repository\PaymentMethodRepository"/>
            <argument type="service" id="Kiener\MolliePayments\Service\SalesChannel\SalesChannelDataExtractor"/>

            <tag name="mollie_payments.mail.attachment_generator"/>
        </service>

        <service id="Kiener\MolliePayments\Components\OrderExpiration\ExpireAction">
            <argument type="service" id="order.repository"/>
            <argument type="service" id="sales_channel.repository"/>
            <argument type="service" id="Kiener\MolliePayments\Service\Order\OrderExpireService"/>
            <argument type="service" id="Kiener\MolliePayments\Service\SettingsService"/>
            <argument type="service" id="monolog.logger.mollie"/>
        </service>

        <service id="Kiener\MolliePayments\Service\OrderCreateService" public="true">
            <argument type="service" id="Shopware\Core\Framework\Validation\DataValidator"/>
            <argument type="service" id="Shopware\Core\Checkout\Order\Validation\OrderValidationFactory"/>
            <argument type="service" id="event_dispatcher"/>
            <argument type="service" id="Shopware\Core\Checkout\Cart\SalesChannel\CartService"/>
            <argument type="service" id="payment_method.repository"/>
        </service>



    </services>
</container>
