<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <preference for="Magento\Customer\Block\Account\Navigation" type="Zhik\Portal\Block\Account\Navigation" />
    <preference for="Magento\Sales\Block\Order\History" type="Zhik\Portal\Block\Order\History" />
    <type name="Magento\Catalog\Pricing\Price\FinalPrice">
        <plugin name="zhik_portal_config_price_override_display" type="Zhik\Portal\Plugin\Catalog\Pricing\FinalPrice" sortOrder="1" disabled="false" />
    </type>
    <type name="Magento\Catalog\Model\Product\Type\Price">
        <plugin name="zhik_portal_config_price_override" type="Zhik\Portal\Plugin\Catalog\Model\Product\Type\Price" sortOrder="1" disabled="false" />
    </type>
    <type name="Magento\CatalogInventory\Model\Stock\Item">
        <plugin name="zhik_portal_backorders" type="Zhik\Portal\Plugin\CatalogInventory\Model\Stock\Item" sortOrder="1" disabled="false" />
    </type>
    <type name="Magento\Catalog\Model\Product">
        <plugin name="zhik_portal_backorders_salable" type="Zhik\Portal\Plugin\Catalog\Model\Product" sortOrder="1" disabled="false" />
    </type>
    <type name="Magento\CatalogInventory\Model\StockRegistry">
        <plugin name="zhik_portal_backorders_stockstatus" type="Zhik\Portal\Plugin\CatalogInventory\Model\StockRegistry" sortOrder="100" disabled="false" />
    </type>
    <type name="Magento\InventorySales\Model\IsProductSalableForRequestedQtyCondition\IsAnySourceItemInStockCondition">
        <plugin name="zhik_portal_backorders_instock" type="Zhik\Portal\Plugin\InventorySales\Model\IsProductSalableForRequestedQtyCondition\IsAnySourceItemInStockCondition" sortOrder="1" disabled="false" />
    </type>
    <type name="Magento\ConfigurableProduct\Model\Product\Type\Configurable">
        <plugin name="zhik_portal_add_parent_id" type="Zhik\Portal\Plugin\ConfigurableProduct\Model\Product\Type\Configurable" sortOrder="100" disabled="false" />
    </type>
    <type name="Magento\ConfigurableProduct\Ui\DataProvider\Product\Form\Modifier\ConfigurablePrice">
        <plugin name="zhik_portal_enable_configurable_price" type="Zhik\Portal\Plugin\DataProvider\Product\Form\Modifier\ConfigurablePrice" sortOrder="100" disabled="false"/>
    </type>
    <preference for="Magento\ConfigurableProduct\Block\Product\View\Type\Configurable" type="Zhik\Portal\Block\Product\View\Type\Configurable"/>

    <type name="Magento\Directory\Model\AllowedCountries">
        <plugin name="zhik_portal_addtional_shipping_countries" type="Zhik\Portal\Plugin\Directory\Model\AllowedCountries"/>
    </type>

    <type name="Magento\Customer\CustomerData\Customer">
        <plugin name="zhik_portal_add_customer_data" type="Zhik\Portal\Plugin\CustomerData\Customer" />
    </type>

    <type name="Magento\Payment\Model\PaymentMethodList">
        <plugin name="Zhik_Portal::hide_postpaid_payment" type="Zhik\Portal\Plugin\Payment\Model\PaymentMethodList" />
    </type>

    <!-- Configure ModuleManager injection for SavedOrders block -->
    <type name="Zhik\Portal\Block\SavedOrders">
        <arguments>
            <argument name="moduleManager" xsi:type="object">Magento\Framework\Module\Manager</argument>
        </arguments>
    </type>

    <!-- Payment Gateway Abstraction -->
    <preference for="Zhik\Portal\Model\Payment\Gateway\GatewayResultInterface"
                type="Zhik\Portal\Model\Payment\Gateway\GatewayResult"/>

    <type name="Zhik\Portal\Model\Payment\BraintreeCredentialSwitcher">
        <arguments>
            <argument name="adapter" xsi:type="object">PayPal\Braintree\Model\Adapter\BraintreeAdapter</argument>
        </arguments>
    </type>

    <type name="Zhik\Portal\Model\Payment\Gateway\BraintreeGateway">
        <arguments>
            <argument name="adapter" xsi:type="object">PayPal\Braintree\Model\Adapter\BraintreeAdapter</argument>
            <argument name="braintreeConfig" xsi:type="object">PayPal\Braintree\Gateway\Config\Config</argument>
        </arguments>
    </type>

    <type name="Zhik\Portal\Model\Payment\Gateway\GatewayFactory">
        <arguments>
            <argument name="ewayGateway" xsi:type="object">Zhik\Portal\Model\Payment\Gateway\EwayGateway</argument>
            <argument name="braintreeGateway" xsi:type="object">Zhik\Portal\Model\Payment\Gateway\BraintreeGateway</argument>
        </arguments>
    </type>
</config>
