<?xml version="1.0"?>
<!--
/**
 * Copyright © 2018 CyberSource. All rights reserved.
 * See LICENSE.txt for license details.
 */
-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\Checkout\Model\CompositeConfigProvider">
        <arguments>
            <argument name="configProviders" xsi:type="array">
                <item name="chcybersource_config_provider" xsi:type="object">CyberSource\SecureAcceptance\Model\Ui\ConfigProvider</item>
                <item name="chcybersource_secure_token_config_provider" xsi:type="object">\CyberSource\SecureAcceptance\Model\Ui\SecureTokenConfigProvider</item>
                <item name="cybersource_iframe_config_provider" xsi:type="object">CyberSourceModelUiIframeConfigProvider</item>
            </argument>
        </arguments>
    </type>

    <virtualType name="CyberSourceModelUiIframeConfigProvider" type="Magento\Payment\Model\IframeConfigProvider">
        <arguments>
            <argument name="methodCode" xsi:type="const">CyberSource\SecureAcceptance\Model\Ui\ConfigProvider::CODE</argument>
        </arguments>
    </virtualType>

    <type name="Magento\Payment\Model\CcGenericConfigProvider">
        <arguments>
            <argument name="methodCodes" xsi:type="array">
                <item name="chcybersource" xsi:type="const">CyberSource\SecureAcceptance\Model\Ui\ConfigProvider::CODE</item>
            </argument>
        </arguments>
    </type>
    <type name="Magento\Vault\Model\Ui\TokensConfigProvider">
        <arguments>
            <argument name="tokenUiComponentProviders" xsi:type="array">
                <item name="chcybersource" xsi:type="object">CyberSource\SecureAcceptance\Model\Ui\TokenUiComponentProvider</item>
            </argument>
        </arguments>
    </type>
    <type name="CyberSource\SecureAcceptance\Block\Info">
        <arguments>
            <argument name="data" xsi:type="array">
                <item xsi:type="string" name="is_secure_mode">1</item>
            </argument>
        </arguments>
    </type>
    <type name="CyberSource\SecureAcceptance\Controller\Index\PlaceOrder">
        <arguments>
            <argument name="checkoutSession" xsi:type="object">Magento\Checkout\Model\Session</argument>
            <argument name="commandManager" xsi:type="object">CyberSourceSACommandManager</argument>
        </arguments>
        <plugin name="updateFailedStatePlugin" type="CyberSource\SecureAcceptance\Plugin\Controller\Index\PlaceOrderPlugin" />
    </type>

    <type name="CyberSource\SecureAcceptance\Plugin\Controller\Index\PlaceOrderPlugin">
        <arguments>
            <argument name="checkoutSession" xsi:type="object">Magento\Checkout\Model\Session</argument>
        </arguments>
    </type>

    <type name="Magento\Vault\Controller\Cards\DeleteAction">
        <plugin name="CyberSource_SecureAcceptance_DeleteToken" type="CyberSource\SecureAcceptance\Plugin\Controller\Cards\DeleteTokenPlugin"/>
    </type>

    <virtualType name="multishippingPaymentSpecification" type="Magento\Payment\Model\Method\Specification\Composite">
        <arguments>
            <argument name="specifications" xsi:type="array">
                <item name="enabled" xsi:type="string">Magento\Multishipping\Model\Payment\Method\Specification\Enabled</item>
            </argument>
        </arguments>
    </virtualType>
    <type name="CyberSource\SecureAcceptance\Block\Checkout\Billing">
        <arguments>
            <argument name="paymentSpecification" xsi:type="object">multishippingPaymentSpecification</argument>
        </arguments>
    </type>

    <type name="CyberSource\SecureAcceptance\Model\SecureToken\Generator">
        <arguments>
            <argument name="checkoutSession" xsi:type="object">Magento\Checkout\Model\Session\Proxy</argument>
        </arguments>
    </type>

    <type name="CyberSource\SecureAcceptance\Model\SecureToken\Validator">
        <arguments>
            <argument name="checkoutSession" xsi:type="object">Magento\Checkout\Model\Session\Proxy</argument>
        </arguments>
    </type>

    <type name="CyberSource\SecureAcceptance\Helper\Vault">
        <arguments>
            <argument name="checkoutSession" xsi:type="object">Magento\Checkout\Model\Session\Proxy</argument>
        </arguments>
    </type>

    <preference for="Magento\Multishipping\Controller\Checkout\Overview" type="CyberSource\SecureAcceptance\Controller\Checkout\Overview" />

    <type name="Magento\Vault\Api\PaymentTokenRepositoryInterface">
        <plugin name="dummy-sa-payment-token-repository-plugin" type="CyberSource\Core\Plugin\PaymentTokenRepositoryPlugin" />
        <plugin name="cybersource-sa-payment-token-repository-plugin" type="CyberSourceSecureAcceptancePaymentTokenRepositoryPlugin" />
    </type>

</config>
