<?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">

    <imports>
        <import resource="services/api.xml"/>
        <import resource="services/components.xml"/>
        <import resource="services/commands.xml"/>
        <import resource="services/facades.xml"/>
        <import resource="services/gateways.xml"/>
        <import resource="services/hydrators.xml"/>
        <import resource="services/payment.xml"/>
        <import resource="services/services.xml"/>
        <import resource="services/subscriber.xml"/>
        <import resource="services/validators.xml"/>
        <import resource="services/builder.xml"/>
        <import resource="services/handlers.xml"/>
        <import resource="services/scheduled_tasks.xml"/>
        <import resource="services/subscription/services.xml"/>
        <import resource="services/refundmanager/services.xml"/>
        <import resource="services/controller.xml"/>
        <import resource="services/snippets.xml"/>
        <import resource="services/repositories.xml"/>
        <import resource="services/fixtures/fixtures.xml"/>
        <import resource="packages/**/*.xml"/>
        <import resource="../../../shopware/Resources/config/services.xml"/>
    </imports>


    <services>

        <!-- Configuration -->
        <service id="Kiener\MolliePayments\Service\ConfigService">
            <argument type="service" id="Shopware\Core\System\SystemConfig\SystemConfigService"/>
            <argument type="service" id="Kiener\MolliePayments\Gateway\Mollie\MollieGateway"/>
            <argument type="service" id="Kiener\MolliePayments\Service\SettingsService"/>
        </service>


        <service id="Kiener\MolliePayments\Components\Installer\PluginInstaller" public="true" >
            <argument type="service" id="Kiener\MolliePayments\Service\Installer\CustomFieldsInstaller"/>
            <argument type="service" id="Kiener\MolliePayments\Service\PaymentMethodService"/>
            <argument type="service" id="Kiener\MolliePayments\Components\ApplePayDirect\Services\ApplePayDomainVerificationService"/>
            <argument type="service" id="Kiener\MolliePayments\Components\Subscription\Services\Installer\MailTemplateInstaller"/>
        </service>


        <!-- Helpers -->
        <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\Order\OrderExpireService">
            <argument type="service" id="Kiener\MolliePayments\Service\Order\OrderStatusUpdater"/>
            <argument type="service" id="Kiener\MolliePayments\Service\Order\OrderTimeService"/>
            <argument type="service" id="Kiener\MolliePayments\Service\SettingsService"/>
            <argument type="service" id="monolog.logger.mollie"/>
        </service>


        <service id="kiener.mollie_payments.http.client.factory" class="Kiener\MolliePayments\Service\HttpClient\PluginHttpClientFactory"/>

        <service id="kiener.mollie_payments.http.client" class="Kiener\MolliePayments\Service\HttpClient\HttpClientInterface">
            <factory service="kiener.mollie_payments.http.client.factory" method="buildClient"/>
        </service>

        <!-- Services -->

        <service id="Kiener\MolliePayments\Service\CustomerService">
            <argument type="service" id="country.repository"/>
            <argument type="service" id="customer.repository"/>
            <argument type="service" id="customer_address.repository"/>
            <argument type="service" id="Kiener\MolliePayments\Service\MollieApi\Customer"/>
            <argument type="service" id="event_dispatcher"/>
            <argument type="service" id="monolog.logger.mollie"/>
            <argument type="service" id="Shopware\Core\System\SalesChannel\Context\SalesChannelContextPersister"/>
            <argument type="service" id="salutation.repository"/>
            <argument type="service" id="Kiener\MolliePayments\Service\SettingsService"/>
            <argument>%kernel.shopware_version%</argument>
            <argument type="service" id="Kiener\MolliePayments\Service\ConfigService"/>
            <argument type="service" id="service_container"/>
            <argument type="service" id="request_stack"/>
            <argument type="service" id="translator"/>
        </service>

        <service id="Kiener\MolliePayments\Service\MandateService" >
            <argument type="service" id="Kiener\MolliePayments\Service\CustomerService"/>
            <argument type="service" id="Kiener\MolliePayments\Service\MollieApi\Mandate"/>
            <argument type="service" id="Kiener\MolliePayments\Components\Subscription\SubscriptionManager"/>
            <argument type="service" id="monolog.logger.mollie"/>
        </service>

        <service id="Kiener\MolliePayments\Service\DeliveryService" >
            <argument type="service" id="order_deliveries.repository"/>
        </service>

        <service id="Kiener\MolliePayments\Service\Installer\CustomFieldsInstaller" >
            <argument type="service" id="custom_field_set.repository"/>
        </service>

        <service id="Kiener\MolliePayments\Service\PaymentMethodService">
            <argument type="service" id="Kiener\MolliePayments\Compatibility\VersionCompare"/>
            <argument type="service" id="Shopware\Core\Content\Media\MediaService"/>
            <argument type="service" id="Kiener\MolliePayments\Repository\MediaRepository"/>
            <argument type="service" id="Kiener\MolliePayments\Repository\PaymentMethodRepository"/>
            <argument type="service" id="Shopware\Core\Framework\Plugin\Util\PluginIdProvider"/>
            <argument type="service" id="kiener.mollie_payments.http.client"/>
            <argument type="service" id="Kiener\MolliePayments\Service\PayPalExpressConfig"/>
        </service>

        <service id="Kiener\MolliePayments\Service\ProductService">
            <argument type="service" id="product.repository"/>
        </service>

        <service id="Kiener\MolliePayments\Service\PayPalExpressConfig">
            <argument type="string">%env(default::MOLLIE_PAYPAL_EXPRESS_BETA)%</argument>
            <argument type="string">%env(default::MOLLIE_PAYPAL_EXPRESS_BUTTON_STYLE)%</argument>
            <argument type="string">%env(default::MOLLIE_PAYPAL_EXPRESS_BUTTON_SHAPE)%</argument>
            <argument type="string">%env(default::MOLLIE_PAYPAL_EXPRESS_BUTTON_RESTRICTIONS)%</argument>
        </service>


        <service id="Kiener\MolliePayments\Service\SettingsService">
            <argument type="service" id="Shopware\Core\System\SystemConfig\SystemConfigService"/>
            <argument type="service" id="sales_channel.repository"/>
            <argument type="service" id="Kiener\MolliePayments\Service\PayPalExpressConfig"/>
            <argument key="$envShopDomain">%env(default::MOLLIE_SHOP_DOMAIN)%</argument>
            <argument key="$envDevMode">%env(default::MOLLIE_DEV_MODE)%</argument>
            <argument key="$envCypressMode">%env(default::MOLLIE_CYPRESS_MODE)%</argument>
        </service>

        <service id="Kiener\MolliePayments\Service\ShippingMethodService" >
            <argument type="service" id="shipping_method.repository"/>
            <argument type="service" id="Shopware\Core\Checkout\Shipping\SalesChannel\ShippingMethodRoute"/>
        </service>

        <service id="Kiener\MolliePayments\Service\ShopService">
            <argument type="service" id="router"/>
        </service>

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

        <service id="Kiener\MolliePayments\Service\Cart\CartBackupService"  public="true">
            <argument type="service" id="Shopware\Core\Checkout\Cart\SalesChannel\CartService"/>
            <argument type="service" id="Shopware\Core\Checkout\Cart\CartPersister"/>
        </service>

        <service id="Kiener\MolliePayments\Service\Mollie\OrderStatusConverter" public="false">
        </service>

        <service id="Kiener\MolliePayments\Controller\Storefront\Webhook\NotificationFacade" public="false">
            <argument type="service" id="Kiener\MolliePayments\Gateway\Mollie\MollieGateway"/>
            <argument type="service" id="Kiener\MolliePayments\Service\Mollie\OrderStatusConverter"/>
            <argument type="service" id="Kiener\MolliePayments\Service\Order\OrderStatusUpdater"/>
            <argument type="service" id="Kiener\MolliePayments\Repository\PaymentMethodRepository"/>
            <argument type="service" id="Kiener\MolliePayments\Repository\OrderTransactionRepository"/>
            <argument type="service" id="Kiener\MolliePayments\Compatibility\Bundles\FlowBuilder\FlowBuilderFactory"/>
            <argument type="service" id="Kiener\MolliePayments\Compatibility\Bundles\FlowBuilder\FlowBuilderEventFactory"/>
            <argument type="service" id="Kiener\MolliePayments\Service\SettingsService"/>
            <argument type="service" id="Kiener\MolliePayments\Components\Subscription\SubscriptionManager"/>
            <argument type="service" id="Kiener\MolliePayments\Service\OrderService"/>
            <argument type="service" id="monolog.logger.mollie"/>
        </service>


        <!-- Subscribers -->
        <service id="Kiener\MolliePayments\Subscriber\CheckoutConfirmPageSubscriber">
            <argument type="service" id="Kiener\MolliePayments\Factory\MollieApiFactory"/>
            <argument type="service" id="Kiener\MolliePayments\Service\SettingsService"/>
            <argument type="service" id="Kiener\MolliePayments\Service\MandateService"/>
            <argument type="service" id="Kiener\MolliePayments\Gateway\Mollie\MollieGateway"/>
            <argument type="service" id="Kiener\MolliePayments\Service\MollieLocaleService"/>
            <tag name="kernel.event_subscriber"/>
        </service>

        <service id="Kiener\MolliePayments\Subscriber\TestModeNotificationSubscriber">
            <argument type="service" id="Kiener\MolliePayments\Service\SettingsService"/>
            <tag name="kernel.event_subscriber"/>
        </service>

        <service id="Kiener\MolliePayments\Subscriber\MandatesSubscriber">
            <argument type="service" id="Kiener\MolliePayments\Service\SettingsService"/>
            <argument type="service" id="Kiener\MolliePayments\Service\MandateService"/>

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

        <service id="Kiener\MolliePayments\Service\Router\RoutingDetector">
            <argument type="service" id="request_stack"/>
        </service>

        <service id="Kiener\MolliePayments\Service\Router\RoutingBuilder">
            <argument type="service" id="router"/>
            <argument type="service" id="Kiener\MolliePayments\Service\Router\RoutingDetector"/>
            <argument type="service" id="Kiener\MolliePayments\Service\SettingsService"/>
            <argument key="$envAppUrl">%env(default::APP_URL)%</argument>
        </service>

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

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


        <service id="Kiener\MolliePayments\Subscriber\KernelSubscriber">
            <argument type="service" id="Kiener\MolliePayments\Compatibility\VersionCompare"/>
            <tag name="kernel.event_subscriber"/>
        </service>

        <service id="Kiener\MolliePayments\Compatibility\Storefront\Route\PaymentMethodRoute\RemovePaymentMethodRoute64"
                 decorates="Shopware\Core\Checkout\Payment\SalesChannel\PaymentMethodRoute">
            <argument type="service" id="Kiener\MolliePayments\Compatibility\Storefront\Route\PaymentMethodRoute\RemovePaymentMethodRoute64.inner"/>

            <argument type="tagged" tag="mollie_payments.payment_method.remover.sw64"/>
        </service>

        <service id="Kiener\MolliePayments\Compatibility\Storefront\Route\PaymentMethodRoute\Cache\CachedPaymentMethodRoute64">
            <argument type="service" id="Kiener\MolliePayments\Service\SettingsService"/>
            <argument type="service" id="Shopware\Core\Checkout\Cart\SalesChannel\CartService"/>
            <tag name="kernel.event_subscriber"/>
        </service>

        <service id="Kiener\MolliePayments\Compatibility\VersionCompare">
            <argument>%kernel.shopware_version%</argument>
        </service>

        <service id="Kiener\MolliePayments\Subscriber\CartConvertedSubscriber">
            <tag name="kernel.event_subscriber"/>
        </service>


        <!-- Mail -->
        <service id="mollie_payments.mail_service" class="Kiener\MolliePayments\Service\Mail\MailService">
            <argument type="service" id="Shopware\Core\Framework\Validation\DataValidator"/>
            <argument type="service" id="Shopware\Core\Content\Mail\Service\MailFactory"/>
            <argument type="service" id="Shopware\Core\Content\Mail\Service\MailSender"/>
        </service>


        <service id="Kiener\MolliePayments\Service\Tags\OrderTagService">
            <argument id="order.repository" type="service"/>
            <argument id="tag.repository" type="service"/>
        </service>
        <service id="Kiener\MolliePayments\Checkout\Cart\ExpressCartItemAddRoute" decorates="Shopware\Core\Checkout\Cart\SalesChannel\CartItemAddRoute" >
            <argument type="service" id=".inner"/>
            <argument type="service" id="service_container"/>
        </service>


    </services>

</container>
