<?xml version="1.0"?>
<!--
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <preference for="Magento\Signifyd\Api\Data\CaseInterface" type="Magento\Signifyd\Model\CaseEntity" />
    <preference for="Magento\Signifyd\Api\CaseRepositoryInterface" type="Magento\Signifyd\Model\CaseRepository" />
    <preference for="Magento\Signifyd\Api\CaseManagementInterface" type="Magento\Signifyd\Model\CaseManagement" />
    <preference for="Magento\Signifyd\Api\Data\CaseSearchResultsInterface" type="Magento\Signifyd\Model\CaseSearchResults" />
    <preference for="Magento\Signifyd\Api\CaseCreationServiceInterface" type="Magento\Signifyd\Model\CaseServices\CreationService" />
    <preference for="Magento\Signifyd\Api\GuaranteeCreationServiceInterface" type="Magento\Signifyd\Model\Guarantee\CreationService" />
    <preference for="Magento\Signifyd\Api\GuaranteeCancelingServiceInterface" type="Magento\Signifyd\Model\Guarantee\CancelingService" />
    <preference for="Magento\Signifyd\Model\SignifydGateway\Request\CreateCaseBuilderInterface" type="Magento\Signifyd\Model\SignifydGateway\Request\CreateCaseBuilder" />

    <virtualType name="SignifydAvsDefaultMapper" type="Magento\Signifyd\Model\PredefinedVerificationCode" />
    <virtualType name="SignifydCvvDefaultMapper" type="Magento\Signifyd\Model\PredefinedVerificationCode" />

    <type name="Magento\Signifyd\Model\PaymentVerificationFactory">
        <arguments>
            <argument name="config" xsi:type="object">Magento\Payment\Gateway\Config\Config</argument>
            <argument name="avsDefaultAdapter" xsi:type="object">SignifydAvsDefaultMapper</argument>
            <argument name="cvvDefaultAdapter" xsi:type="object">SignifydCvvDefaultMapper</argument>
        </arguments>
    </type>
    <type name="Magento\Signifyd\Model\SalesOrderGrid\OrderGridUpdater">
        <arguments>
            <argument name="entityGrid" xsi:type="object">Magento\Sales\Model\ResourceModel\Order\Grid</argument>
        </arguments>
    </type>
    <virtualType name="SignifydIdListProvider" type="Magento\Sales\Model\ResourceModel\Provider\NotSyncedDataProvider">
        <arguments>
            <argument name="providers" xsi:type="array">
                <item name="signifyd" xsi:type="string">Magento\Signifyd\Model\SalesOrderGrid\NotSyncedOrderIdListProvider</item>
            </argument>
        </arguments>
    </virtualType>
    <virtualType name="Magento\Sales\Model\ResourceModel\Order\Grid">
        <arguments>
            <argument name="idListProvider" xsi:type="object">SignifydIdListProvider</argument>
            <argument name="joins" xsi:type="array">
                <item name="signifyd_case" xsi:type="array">
                    <item name="table" xsi:type="string">signifyd_case</item>
                    <item name="origin_column" xsi:type="string">entity_id</item>
                    <item name="target_column" xsi:type="string">order_id</item>
                </item>
            </argument>
            <argument name="columns" xsi:type="array">
                <item name="signifyd_guarantee_status" xsi:type="string">signifyd_case.guarantee_disposition</item>
            </argument>
        </arguments>
    </virtualType>
    <type name="Magento\Signifyd\Model\ResourceModel\CaseEntity">
        <arguments>
            <argument name="connectionName" xsi:type="string">sales</argument>
        </arguments>
    </type>
    <virtualType name="PaymentMapperSchemaLocator" type="Magento\Framework\Config\GenericSchemaLocator">
        <arguments>
            <argument name="moduleName" xsi:type="string">Magento_Signifyd</argument>
            <argument name="schema" xsi:type="string">signifyd_payment_mapping.xsd</argument>
        </arguments>
    </virtualType>
    <virtualType name="PaymentMapperConfigReader" type="Magento\Framework\Config\Reader\Filesystem">
        <arguments>
            <argument name="converter" xsi:type="object">Magento\Signifyd\Model\PaymentMethodMapper\XmlToArrayConfigConverter</argument>
            <argument name="schemaLocator" xsi:type="object">PaymentMapperSchemaLocator</argument>
            <argument name="fileName" xsi:type="string">signifyd_payment_mapping.xml</argument>
            <argument name="idAttributes" xsi:type="array">
                <item name="/config/payment_method_list/payment_method" xsi:type="string">name</item>
            </argument>
        </arguments>
    </virtualType>
    <virtualType name="PaymentMethodConfigData" type="Magento\Framework\Config\Data">
        <arguments>
            <argument name="reader" xsi:type="object">PaymentMapperConfigReader</argument>
            <argument name="cacheId" xsi:type="string">signifyd_payment_list_cache</argument>
        </arguments>
    </virtualType>
    <type name="Magento\Signifyd\Model\PaymentMethodMapper\PaymentMethodMapper">
        <arguments>
            <argument name="paymentMapping" xsi:type="object">PaymentMethodConfigData</argument>
        </arguments>
    </type>
    <type name="Magento\Config\Model\Config\TypePool">
        <arguments>
            <argument name="sensitive" xsi:type="array">
                <item name="fraud_protection/signifyd/api_key" xsi:type="string">1</item>
                <item name="fraud_protection/signifyd/api_url" xsi:type="string">1</item>
            </argument>
            <argument name="environment" xsi:type="array">
                <item name="fraud_protection/signifyd/api_key" xsi:type="string">1</item>
                <item name="fraud_protection/signifyd/api_url" xsi:type="string">1</item>
            </argument>
        </arguments>
    </type>
    <type name="Magento\Sales\Model\Order">
        <plugin name="cancelGuaranteeAfterOrderCancel" type="Magento\Signifyd\Plugin\OrderPlugin" />
    </type>
    <type name="Magento\Payment\Model\MethodInterface">
        <plugin name="cancelGuaranteeAfterPaymentDeny" type="Magento\Signifyd\Plugin\PaymentPlugin" />
    </type>
</config>
