<?xml version="1.0" encoding="UTF-8"?>

<!--

 This file is part of the Sylius package.

 (c) Sylius Sp. z o.o.

 For the full copyright and license information, please view the LICENSE
 file that was distributed with this source code.

-->

<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>
        <defaults public="true"/>

        <service id="sylius_paypal.controller.webhook.refund_order" class="Sylius\PayPalPlugin\Controller\Webhook\RefundOrderAction">
            <argument type="service" id="sylius_abstraction.state_machine" />
            <argument type="service" id="sylius_paypal.provider.payment" />
            <argument type="service" id="sylius.manager.payment" />
            <argument type="service" id="sylius_paypal.provider.paypal_refund_data" />
            <argument type="service" id="sylius_paypal.repository.query.paypal_payment" />
        </service>

        <service id="sylius_paypal.controller.cancel_paypal_order" class="Sylius\PayPalPlugin\Controller\CancelPayPalOrderAction">
            <argument>null</argument>
            <argument>null</argument>
            <argument type="service" id="request_stack" />
        </service>

        <service id="sylius_paypal.controller.cancel_paypal_payment" class="Sylius\PayPalPlugin\Controller\CancelPayPalPaymentAction">
            <argument type="service" id="sylius_paypal.provider.payment" />
            <argument type="service" id="doctrine.orm.entity_manager" />
            <argument type="service" id="request_stack" />
            <argument type="service" id="sylius_abstraction.state_machine" />
            <argument type="service" id="sylius.order_processing.order_payment_processor.checkout" />
            <argument type="service" id="sylius_paypal.repository.query.paypal_payment" />
        </service>

        <service id="sylius_paypal.controller.cancel_last_paypal_payment" class="Sylius\PayPalPlugin\Controller\CancelLastPayPalPaymentAction">
            <argument type="service" id="doctrine.orm.entity_manager" />
            <argument type="service" id="sylius_abstraction.state_machine" />
            <argument type="service" id="sylius.order_processing.order_payment_processor.checkout" />
            <argument type="service" id="sylius.repository.order" />
        </service>

        <service id="sylius_paypal.controller.cancel_paypal_checkout_payment" class="Sylius\PayPalPlugin\Controller\CancelPayPalCheckoutPaymentAction">
            <argument type="service" id="sylius_paypal.provider.payment" />
            <argument type="service" id="sylius_paypal.manager.payment_state" />
            <argument type="service" id="sylius_paypal.repository.query.paypal_payment" />
        </service>

        <service id="sylius_paypal.controller.complete_paypal_order" class="Sylius\PayPalPlugin\Controller\CompletePayPalOrderAction">
            <argument type="service" id="sylius_paypal.manager.payment_state" />
            <argument type="service" id="router" />
            <argument type="service" id="sylius_paypal.provider.order" />
            <argument type="service" id="sylius_paypal.api.authorize_client" />
            <argument type="service" id="sylius_paypal.api.complete_order" />
        </service>

        <service id="sylius_paypal.controller.create_paypal_order_from_payment_page" class="Sylius\PayPalPlugin\Controller\CreatePayPalOrderFromPaymentPageAction">
            <argument type="service" id="sylius_abstraction.state_machine" />
            <argument type="service" id="sylius_paypal.manager.payment_state" />
            <argument type="service" id="sylius_paypal.provider.order" />
            <argument type="service" id="sylius_paypal.resolver.capture_payment" />
        </service>

        <service id="sylius_paypal.controller.download_payouts_report" class="Sylius\PayPalPlugin\Controller\DownloadPayoutsReportAction">
            <argument type="service" id="sylius_paypal.downloader.report" />
            <argument type="service" id="sylius.repository.payment_method" />
        </service>

        <service id="sylius_paypal.controller.enable_seller" class="Sylius\PayPalPlugin\Controller\EnableSellerAction">
            <argument type="service" id="sylius.repository.payment_method" />
            <argument type="service" id="sylius_paypal.enabler.payment_method" />
        </service>

        <service id="sylius_paypal.controller.create_paypal_order" class="Sylius\PayPalPlugin\Controller\CreatePayPalOrderAction">
            <argument type="service" id="sylius_paypal.manager.payment_state" />
            <argument type="service" id="sylius_paypal.provider.order" />
            <argument type="service" id="sylius_paypal.resolver.capture_payment" />
        </service>

        <service id="sylius_paypal.controller.create_paypal_order_from_cart" class="Sylius\PayPalPlugin\Controller\CreatePayPalOrderFromCartAction">
            <argument type="service" id="sylius.manager.payment" />
            <argument type="service" id="sylius_paypal.provider.order" />
            <argument type="service" id="sylius_paypal.resolver.capture_payment" />
            <argument type="service" id="sylius.remover.payment.order" />
            <argument type="service" id="sylius.order_processing.order_processor" />
            <argument type="service" id="sylius_paypal.resolver.paypal_payment_methods" />
        </service>

        <service id="sylius_paypal.controller.paypal_buttons" class="Sylius\PayPalPlugin\Controller\PayPalButtonsController">
            <argument type="service" id="twig" />
            <argument type="service" id="router" />
            <argument type="service" id="sylius.context.channel" />
            <argument type="service" id="sylius.context.locale" />
            <argument type="service" id="sylius_paypal.provider.paypal_configuration" />
            <argument type="service" id="sylius.repository.order" />
            <argument type="service" id="sylius_paypal.provider.available_countries" />
            <argument type="service" id="sylius_paypal.processor.locale" />
        </service>

        <service id="sylius_paypal.controller.pay_with_paypal_form" class="Sylius\PayPalPlugin\Controller\PayWithPayPalFormAction">
            <argument type="service" id="twig" />
            <argument type="service" id="sylius.repository.payment" />
            <argument type="service" id="sylius_paypal.provider.available_countries" />
            <argument type="service" id="sylius_paypal.api.cache_authorize_client" />
            <argument type="service" id="sylius_paypal.api.identity" />
            <argument type="service" id="sylius_paypal.processor.locale" />
        </service>

        <service id="sylius_paypal.controller.process_paypal_order" class="Sylius\PayPalPlugin\Controller\ProcessPayPalOrderAction">
            <argument type="service" id="sylius.repository.customer" />
            <argument type="service" id="sylius.factory.customer" />
            <argument type="service" id="sylius.factory.address" />
            <argument type="service" id="sylius.manager.order" />
            <argument type="service" id="sylius_abstraction.state_machine" />
            <argument type="service" id="sylius_paypal.manager.payment_state" />
            <argument type="service" id="sylius_paypal.api.cache_authorize_client" />
            <argument type="service" id="sylius_paypal.api.order_details" />
            <argument type="service" id="sylius_paypal.provider.order" />
            <argument type="service" id="sylius_paypal.verifier.payment_amount" />
        </service>

        <service id="sylius_paypal.controller.update_paypal_order" class="Sylius\PayPalPlugin\Controller\UpdatePayPalOrderAction">
            <argument type="service" id="sylius_paypal.provider.payment" />
            <argument type="service" id="sylius_paypal.api.cache_authorize_client" />
            <argument type="service" id="sylius_paypal.api.update_order" />
            <argument type="service" id="sylius.factory.address" />
            <argument type="service" id="sylius.order_processing.order_processor" />
            <argument type="service" id="sylius_paypal.repository.query.paypal_payment" />
        </service>

        <service id="sylius_paypal.controller.complete_paypal_order_from_payment_page" class="Sylius\PayPalPlugin\Controller\CompletePayPalOrderFromPaymentPageAction">
            <argument type="service" id="sylius_paypal.manager.payment_state" />
            <argument type="service" id="router" />
            <argument type="service" id="sylius_paypal.provider.order" />
            <argument type="service" id="sylius_abstraction.state_machine" />
            <argument type="service" id="sylius.manager.order" />
            <argument type="service" id="sylius_paypal.verifier.payment_amount" />
            <argument type="service" id="sylius.order_processing.order_processor" />
        </service>

        <service id="sylius_paypal.controller.paypal_payment_on_error" class="Sylius\PayPalPlugin\Controller\PayPalPaymentOnErrorAction">
            <argument type="service" id="request_stack" />
            <argument type="service" id="monolog.logger.paypal" />
        </service>

        <service id="sylius_paypal.controller.add_to_cart" class="Sylius\PayPalPlugin\Controller\AddToCartAction">
            <argument type="service" id="sylius.factory.add_to_cart_command" />
            <argument type="service" id="sylius.context.cart.new" />
            <argument type="service" id="doctrine.orm.entity_manager" />
            <argument type="service" id="sylius.factory.order_item" />
            <argument type="service" id="form.factory" />
            <argument type="service">
                <service class="Sylius\Component\Resource\Metadata\MetadataInterface">
                    <factory service="sylius.resource_registry" method="get" />
                    <argument type="string">sylius.order_item</argument>
                </service>
            </argument>
            <argument type="service" id="sylius.resource_controller.new_resource_factory" />
            <argument type="service" id="sylius.modifier.order_item_quantity" />
            <argument type="service" id="sylius.modifier.order" />
            <argument type="service" id="sylius.resource_controller.request_configuration_factory" />
            <argument type="service" id="router" />
        </service>

    </services>
</container>
