<?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"
>
    <parameters>
        <parameter key="sylius_paypal.request_trials_limit">5</parameter>
    </parameters>
    <services>
        <service
            id="sylius_paypal.client.paypal"
            class="Sylius\PayPalPlugin\Client\PayPalClient"
        >
            <argument type="service" id="sylius.http_client" />
            <argument type="service" id="monolog.logger.paypal" />
            <argument type="service" id="sylius_paypal.provider.uuid" />
            <argument type="service" id="sylius_paypal.provider.paypal_configuration" />
            <argument type="service" id="sylius.context.channel" />
            <argument>%sylius_paypal.api_base_url%</argument>
            <argument>%sylius_paypal.request_trials_limit%</argument>
            <argument type="service" id="Psr\Http\Message\RequestFactoryInterface" />
            <argument type="service" id="Psr\Http\Message\StreamFactoryInterface" />
            <argument>%sylius_paypal.logging.increased%</argument>
        </service>
        <service id="Sylius\PayPalPlugin\Client\PayPalClientInterface" alias="sylius_paypal.client.paypal" />

        <service
            id="sylius_paypal.api.authorize_client"
            class="Sylius\PayPalPlugin\Api\AuthorizeClientApi"
        >
            <argument type="service" id="sylius_paypal.client.paypal" />
        </service>
        <service id="Sylius\PayPalPlugin\Api\AuthorizeClientApiInterface" alias="sylius_paypal.api.authorize_client" />

        <service
            id="sylius_paypal.repository.paypal_credentials"
            class="Doctrine\ORM\EntityRepository"
        >
            <factory service="doctrine.orm.entity_manager" method="getRepository"/>
            <argument>Sylius\PayPalPlugin\Entity\PayPalCredentials</argument>
        </service>

        <service
            id="sylius_paypal.api.cache_authorize_client"
            class="Sylius\PayPalPlugin\Api\CacheAuthorizeClientApi"
        >
            <argument type="service" id="doctrine.orm.entity_manager" />
            <argument type="service" id="sylius_paypal.repository.paypal_credentials" />
            <argument type="service" id="sylius_paypal.api.authorize_client" />
            <argument type="service" id="sylius_paypal.provider.uuid" />
        </service>
        <service id="Sylius\PayPalPlugin\Api\CacheAuthorizeClientApiInterface" alias="sylius_paypal.api.cache_authorize_client" />

        <service
            id="sylius_paypal.api.complete_order"
            class="Sylius\PayPalPlugin\Api\CompleteOrderApi"
        >
            <argument type="service" id="sylius_paypal.client.paypal" />
        </service>
        <service id="Sylius\PayPalPlugin\Api\CompleteOrderApiInterface" alias="sylius_paypal.api.complete_order" />

        <service
            id="sylius_paypal.api.generic"
            class="Sylius\PayPalPlugin\Api\GenericApi"
        >
            <argument type="service" id="sylius.http_client" />
            <argument type="service" id="Psr\Http\Message\RequestFactoryInterface" />
        </service>
        <service id="Sylius\PayPalPlugin\Api\GenericApiInterface" alias="sylius_paypal.api.generic" />

        <service
            id="sylius_paypal.api.create_order"
            class="Sylius\PayPalPlugin\Api\CreateOrderApi"
        >
            <argument type="service" id="sylius_paypal.client.paypal" />
            <argument type="service" id="sylius_paypal.provider.payment_reference_number" />
            <argument type="service" id="sylius_paypal.provider.paypal_item_data" />
        </service>
        <service id="Sylius\PayPalPlugin\Api\CreateOrderApiInterface" alias="sylius_paypal.api.create_order" />

        <service
            id="sylius_paypal.api.identity"
            class="Sylius\PayPalPlugin\Api\IdentityApi"
        >
            <argument type="service" id="sylius_paypal.client.paypal" />
        </service>
        <service id="Sylius\PayPalPlugin\Api\IdentityApiInterface" alias="sylius_paypal.api.identity" />

        <service
            id="sylius_paypal.api.order_details"
            class="Sylius\PayPalPlugin\Api\OrderDetailsApi"
        >
            <argument type="service" id="sylius_paypal.client.paypal" />
        </service>
        <service id="Sylius\PayPalPlugin\Api\OrderDetailsApiInterface" alias="sylius_paypal.api.order_details" />

        <service
            id="sylius_paypal.api.webhook"
            class="Sylius\PayPalPlugin\Api\WebhookApi"
        >
            <argument type="service" id="sylius.http_client" />
            <argument>%sylius_paypal.api_base_url%</argument>
            <argument type="service" id="Psr\Http\Message\RequestFactoryInterface" />
            <argument type="service" id="Psr\Http\Message\StreamFactoryInterface" />
        </service>
        <service id="Sylius\PayPalPlugin\Api\WebhookApiInterface" alias="sylius_paypal.api.webhook" />

        <service
            id="sylius_paypal.api.update_order"
            class="Sylius\PayPalPlugin\Api\UpdateOrderApi"
        >
            <argument type="service" id="sylius_paypal.client.paypal" />
            <argument type="service" id="sylius_paypal.provider.payment_reference_number" />
            <argument type="service" id="sylius_paypal.provider.paypal_item_data" />
        </service>
        <service id="Sylius\PayPalPlugin\Api\UpdateOrderApiInterface" alias="sylius_paypal.api.update_order" />

        <service
            id="sylius_paypal.api.update_order_address"
            class="Sylius\PayPalPlugin\Api\UpdateOrderAddressApi"
        >
            <argument type="service" id="sylius_paypal.client.paypal" />
        </service>

        <service
            id="sylius_paypal.api.refund_payment"
            class="Sylius\PayPalPlugin\Api\RefundPaymentApi"
        >
            <argument type="service" id="sylius_paypal.client.paypal" />
        </service>
        <service id="Sylius\PayPalPlugin\Api\RefundPaymentApiInterface" alias="sylius_paypal.api.refund_payment" />
    </services>
</container>
