<?xml version="1.0"?>
<!--
/**
 * Avalara_AvaTax
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Open Software License (OSL 3.0)
 * that is bundled with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://opensource.org/licenses/osl-3.0.php
 *
 * @copyright  Copyright (c) 2016 Avalara, Inc.
 * @license    http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
 */
-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\Framework\Notification\MessageList">
        <arguments>
            <argument name="messages" xsi:type="array">
                <item name="avatax_queue" xsi:type="string">Avalara\AvaTax\Model\Message\QueueNotification</item>
                <item name="avatax_queue_failure" xsi:type="string">Avalara\AvaTax\Model\Message\QueueFailureNotification</item>
                <item name="avatax_queue_disabled" xsi:type="string">Avalara\AvaTax\Model\Message\QueueDisabledNotification</item>
                <item name="avatax_config" xsi:type="string">Avalara\AvaTax\Model\Message\ConfigNotification</item>
            </argument>
        </arguments>
    </type>
    <preference for="Magento\Tax\Block\Adminhtml\Rule\Edit\Form" type="Avalara\AvaTax\Block\Tax\Adminhtml\Rule\Edit\Form"/>
    <preference for="Avalara\AvaTax\Api\TaxCodeRepositoryInterface" type="Avalara\AvaTax\Model\TaxCodeRepository" />

    <virtualType name="companyCodeFrontendModel" type="Avalara\AvaTax\Block\Adminhtml\Form\Field\CompanyCode">
        <arguments>
            <argument name="data" xsi:type="array">
                <item name="account_number_id" xsi:type="string">tax_avatax_configuration_account_number</item>
                <item name="license_key_id" xsi:type="string">tax_avatax_configuration_license_key</item>
                <item name="company_code_id" xsi:type="string">tax_avatax_configuration_sales_tax_company_code</item>
                <item name="company_code_group" xsi:type="string">avatax_configuration</item>
                <item name="company_code_field" xsi:type="string">company_code</item>
                <item name="company_id_id" xsi:type="string">tax_avatax_configuration_sales_tax_company_id</item>
            </argument>
        </arguments>
    </virtualType>

    <type name="Magento\Config\Model\Config">
        <plugin sortOrder="1" name="avalaraAvaTaxConfig" type="Avalara\AvaTax\Plugin\Model\ConfigPlugin"/>
    </type>

    <virtualType name="uspsCarrierProvider" type="Avalara\AvaTax\Model\Config\Source\CarrierShippingMethodsProvider">
        <arguments>
            <argument name="data" xsi:type="array">
                <item name="carrier_code" xsi:type="string">usps</item>
                <item name="carrier_label" xsi:type="string">USPS</item>
            </argument>
            <argument name="carrierShippingMethods" xsi:type="object">Avalara\AvaTax\Model\Config\Source\CarrierMethodProviders\USPS</argument>
        </arguments>
    </virtualType>
    <virtualType name="upsCarrierProvider" type="Avalara\AvaTax\Model\Config\Source\CarrierShippingMethodsProvider">
        <arguments>
            <argument name="data" xsi:type="array">
                <item name="carrier_code" xsi:type="string">ups</item>
                <item name="carrier_label" xsi:type="string">UPS</item>
            </argument>
            <argument name="carrierShippingMethods" xsi:type="object">Avalara\AvaTax\Model\Config\Source\CarrierMethodProviders\UPS</argument>
        </arguments>
    </virtualType>
    <virtualType name="fedexCarrierProvider" type="Avalara\AvaTax\Model\Config\Source\CarrierShippingMethodsProvider">
        <arguments>
            <argument name="data" xsi:type="array">
                <item name="carrier_code" xsi:type="string">fedex</item>
                <item name="carrier_label" xsi:type="string">Fedex</item>
            </argument>
            <argument name="carrierShippingMethods" xsi:type="object">Avalara\AvaTax\Model\Config\Source\CarrierMethodProviders\Fedex</argument>
        </arguments>
    </virtualType>
    <virtualType name="dhlCarrierProvider" type="Avalara\AvaTax\Model\Config\Source\CarrierShippingMethodsProvider">
        <arguments>
            <argument name="data" xsi:type="array">
                <item name="carrier_code" xsi:type="string">dhl</item>
                <item name="carrier_label" xsi:type="string">DHL</item>
            </argument>
            <argument name="carrierShippingMethods" xsi:type="object">Avalara\AvaTax\Model\Config\Source\CarrierMethodProviders\DHL</argument>
        </arguments>
    </virtualType>
    <virtualType name="flatRateCarrierProvider" type="Avalara\AvaTax\Model\Config\Source\CarrierShippingMethodsProvider">
        <arguments>
            <argument name="data" xsi:type="array">
                <item name="carrier_code" xsi:type="string">flatrate</item>
                <item name="carrier_label" xsi:type="string">FlatRate</item>
            </argument>
            <argument name="carrierShippingMethods" xsi:type="object">Avalara\AvaTax\Model\Config\Source\CarrierMethodProviders\FlatRate</argument>
        </arguments>
    </virtualType>
    <virtualType name="freeShippingCarrierProvider" type="Avalara\AvaTax\Model\Config\Source\CarrierShippingMethodsProvider">
        <arguments>
            <argument name="data" xsi:type="array">
                <item name="carrier_code" xsi:type="string">freeshipping</item>
                <item name="carrier_label" xsi:type="string">Free Shipping</item>
            </argument>
            <argument name="carrierShippingMethods" xsi:type="object">Avalara\AvaTax\Model\Config\Source\CarrierMethodProviders\FreeShipping</argument>
        </arguments>
    </virtualType>

    <type name="Avalara\AvaTax\Model\Config\Source\AvailableShippingMethods">
        <arguments>
            <argument name="carrierMethodsProviders" xsi:type="array">
                <item name="uspsCarrierProvider" xsi:type="object">uspsCarrierProvider</item>
                <item name="upsCarrierProvider" xsi:type="object">upsCarrierProvider</item>
                <item name="fedexCarrierProvider" xsi:type="object">fedexCarrierProvider</item>
                <item name="dhlCarrierProvider" xsi:type="object">dhlCarrierProvider</item>
                <item name="flatRateCarrierProvider" xsi:type="object">flatRateCarrierProvider</item>
                <item name="freeShippingCarrierProvider" xsi:type="object">freeShippingCarrierProvider</item>
            </argument>
        </arguments>
    </type>

    <virtualType name="Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\Pool">
        <arguments>
            <argument name="modifiers" xsi:type="array">
                <item name="avatax" xsi:type="array">
                    <item name="class" xsi:type="string">\Avalara\AvaTax\Ui\DataProvider\Product\Form\Modifier\AvaTax</item>
                    <item name="sortOrder" xsi:type="number">160</item>
                </item>
            </argument>
        </arguments>
    </virtualType>

    <type name="Magento\Customer\Model\Customer\DataProvider">
        <plugin sortOrder="1" name="avalaraAvaTaxDataProvider" type="Avalara\AvaTax\Plugin\Model\Customer\DataProviderPlugin" disabled="true"/>
    </type>
    <type name="Magento\Framework\View\Layout\Generic">
        <plugin sortOrder="1" name="avalaraAvaTaxGeneric" type="Avalara\AvaTax\Plugin\View\Layout\GenericPlugin"/>
    </type>
    <type name="Magento\Ui\Component\Form">
        <plugin sortOrder="1" name="avalaraAvaTaxForm" type="Avalara\AvaTax\Plugin\Component\FormPlugin"/>
    </type>

    <preference for="Magento\Ui\Component\Layout\Tabs" type="Avalara\AvaTax\Component\Layout\Tabs"/>

    <type name="Magento\Sales\Model\AdminOrder\Create">
        <plugin name="avatax_sales_model_admin_order_create" type="Avalara\AvaTax\Plugin\Sales\Model\AdminOrder\Create" />
    </type>

    <type name="Magento\Sales\Block\Adminhtml\Order\Create\Form\Account">
        <plugin name="avalara_avatax_sales_order_create_form_account_admin_block" type="Avalara\AvaTax\Plugin\Sales\Admin\Order\Create\Form\Account" />
    </type>
    <type name="Magento\Catalog\Ui\DataProvider\Product\ProductDataProvider"> 
        <arguments> 
            <argument name="addFieldStrategies" xsi:type="array"> 
                <item name="syncstatus" xsi:type="object">Avalara\AvaTax\Ui\DataProvider\Product\AddAvaTaxProductsSyncFieldToCollection</item> 
            </argument> 
            <argument name="addFilterStrategies" xsi:type="array"> 
                <item name="syncstatus" xsi:type="object">Avalara\AvaTax\Ui\DataProvider\Product\AddAvaTaxProductsSyncFilterToCollection</item> 
            </argument> 
        </arguments> 
    </type>


    <virtualType name="addressValidationEnabledToggle" type="Avalara\AvaTax\Block\Adminhtml\System\Config\ToggelSwitch">
        <arguments>
            <argument name="configdata" xsi:type="array">
                <item name="group_name" xsi:type="string">avatax_configuration</item>
                <item name="child_group_name" xsi:type="string">address_validation</item>
                <item name="field_name" xsi:type="string">address_validation_enabled</item>
                <item name="field_class" xsi:type="string">address</item>
                <item name="field_path" xsi:type="string">tax/avatax/address_validation_enabled</item>
            </argument>
        </arguments>
    </virtualType>
    <virtualType name="customDutyEnabledToggle" type="Avalara\AvaTax\Block\Adminhtml\System\Config\ToggelSwitch">
        <arguments>
            <argument name="configdata" xsi:type="array">
                <item name="group_name" xsi:type="string">avatax_configuration</item>
                <item name="child_group_name" xsi:type="string">cross_border</item>
                <item name="field_name" xsi:type="string">enabled</item>
                <item name="field_class" xsi:type="string">duty</item>
                <item name="field_path" xsi:type="string">tax/avatax_customs/enabled</item>
            </argument>
        </arguments>
    </virtualType>
    <virtualType name="productSyncEnabledToggle" type="Avalara\AvaTax\Block\Adminhtml\System\Config\ToggelSwitch">
        <arguments>
            <argument name="configdata" xsi:type="array">
                <item name="group_name" xsi:type="string">avatax_configuration</item>
                <item name="child_group_name" xsi:type="string">one_way_items_sync</item>
                <item name="field_name" xsi:type="string">one_way_items_sync_enabled</item>
                <item name="field_class" xsi:type="string">productsync</item>
                <item name="field_path" xsi:type="string">tax/one_way_items_sync/enabled</item>
            </argument>
        </arguments>
    </virtualType>
    <virtualType name="ecmEnabledToggle" type="Avalara\AvaTax\Block\Adminhtml\System\Config\ToggelSwitch">
        <arguments>
            <argument name="configdata" xsi:type="array">
                <item name="group_name" xsi:type="string">avatax_configuration</item>
                <item name="child_group_name" xsi:type="string">exemption_certcapture_management</item>
                <item name="field_name" xsi:type="string">enabled</item>
                <item name="field_class" xsi:type="string">ecm</item>
                <item name="field_path" xsi:type="string">tax/avatax_document_management/enabled</item>
            </argument>
        </arguments>
    </virtualType>
    <virtualType name="submitVatEnabledToggle" type="Avalara\AvaTax\Block\Adminhtml\System\Config\ToggelSwitch">
        <arguments>
            <argument name="configdata" xsi:type="array">
                <item name="group_name" xsi:type="string">avatax_configuration</item>
                <item name="child_group_name" xsi:type="string">cross_border</item>
                <item name="field_name" xsi:type="string">use_business_identification_number</item>
                <item name="field_class" xsi:type="string">submitvat</item>
                <item name="field_path" xsi:type="string">tax/avatax/use_business_identification_number</item>
            </argument>
        </arguments>
    </virtualType>
    <virtualType name="adjustmentEnabledToggle" type="Avalara\AvaTax\Block\Adminhtml\System\Config\ToggelSwitch">
        <arguments>
            <argument name="configdata" xsi:type="array">
                <item name="group_name" xsi:type="string">avatax_configuration</item>
                <item name="child_group_name" xsi:type="string">sales_tax</item>
                <item name="field_name" xsi:type="string">avatax_adjustment_taxes</item>
                <item name="field_class" xsi:type="string">adjustment</item>
                <item name="field_path" xsi:type="string">tax/avatax_advanced/avatax_adjustment_taxes</item>
            </argument>
        </arguments>
    </virtualType>
    <virtualType name="queueAdminNotificationEnabledToggle" type="Avalara\AvaTax\Block\Adminhtml\System\Config\ToggelSwitch">
        <arguments>
            <argument name="configdata" xsi:type="array">
                <item name="parent_group_name" xsi:type="string">avatax_configuration</item>
                <item name="group_name" xsi:type="string">error_logs_queue</item>
                <item name="child_group_name" xsi:type="string">queue_settings</item>
                <item name="field_name" xsi:type="string">queue_admin_notification_enabled</item>
                <item name="field_class" xsi:type="string">adminnotification</item>
                <item name="field_path" xsi:type="string">tax/avatax/queue_admin_notification_enabled</item>
            </argument>
        </arguments>
    </virtualType>
    <virtualType name="queueFailureNotificationEnabledToggle" type="Avalara\AvaTax\Block\Adminhtml\System\Config\ToggelSwitch">
        <arguments>
            <argument name="configdata" xsi:type="array">
                <item name="parent_group_name" xsi:type="string">avatax_configuration</item>
                <item name="group_name" xsi:type="string">error_logs_queue</item>
                <item name="child_group_name" xsi:type="string">queue_settings</item>
                <item name="field_name" xsi:type="string">queue_failure_notification_enabled</item>
                <item name="field_class" xsi:type="string">failurenotification</item>
                <item name="field_path" xsi:type="string">tax/avatax/queue_failure_notification_enabled</item>
            </argument>
        </arguments>
    </virtualType>
    <virtualType name="loggingFileEnabledToggle" type="Avalara\AvaTax\Block\Adminhtml\System\Config\ToggelSwitch">
        <arguments>
            <argument name="configdata" xsi:type="array">
                <item name="parent_group_name" xsi:type="string">avatax_configuration</item>
                <item name="group_name" xsi:type="string">error_logs_queue</item>
                <item name="child_group_name" xsi:type="string">logs_settings</item>
                <item name="field_name" xsi:type="string">logging_file_enabled</item>
                <item name="field_class" xsi:type="string">loggingfile</item>
                <item name="field_path" xsi:type="string">tax/avatax/logging_file_enabled</item>
            </argument>
        </arguments>
    </virtualType>
    <type name="Magento\Backend\Controller\Adminhtml\System\Store\DeleteStorePost">
        <plugin name="avalara_avatax_backend_adminhtml_system_store_deletestorepost" type="Avalara\AvaTax\Plugin\Controller\Backend\Adminhtml\System\Store\DeleteStorePostPlugin" />
    </type>
</config>
