<?xml version="1.0"?>
<!--
/**
 * @author Amasty Team
 * @copyright Copyright (c) Amasty (https://www.amasty.com)
 * @package TikTok Pixel by Amasty
 */-->

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Amasty\PixelTikTok\Model\Api\Builder\Composite">
        <arguments>
            <argument name="builders" xsi:type="array">
                <item name="event" sortOrder="10" xsi:type="object">Amasty\PixelTikTok\Model\Api\Builder\Event</item>
                <item name="user" sortOrder="20" xsi:type="object">Amasty\PixelTikTok\Model\Api\Builder\User</item>
                <item name="page" sortOrder="30" xsi:type="object">Amasty\PixelTikTok\Model\Api\Builder\Page</item>
                <item name="cleaner" sortOrder="40" xsi:type="object">Amasty\PixelTikTok\Model\Api\Builder\Cleaner</item>
            </argument>
        </arguments>
    </type>
    <type name="Amasty\PixelTikTok\Model\Api\ApiEventDataFactory">
        <arguments>
            <argument name="paramsBuilder" xsi:type="object">Amasty\PixelTikTok\Model\Api\Builder\Composite</argument>
        </arguments>
    </type>

    <type name="Amasty\PixelCore\Model\Storage\StorageResolver">
        <arguments>
            <argument name="storagePool" xsi:type="array">
                <item name="tiktok_server" xsi:type="object">Amasty\PixelTikTok\Model\Storage\ServerStorage</item>
            </argument>
        </arguments>
    </type>

    <virtualType name="Amasty\PixelTikTok\Model\Event\Events\NewsletterSubscribeEvent"
                 type="Amasty\PixelCore\Model\Event\Events\CommonEvent">
        <arguments>
            <argument name="eventName" xsi:type="string">tiktok_newsletter_subscribe</argument>
        </arguments>
    </virtualType>

    <type name="Amasty\PixelCore\Model\Event\EventsPool">
        <arguments>
            <argument name="events" xsi:type="array">
                <item name="tiktok_newsletter_subscribe"
                      xsi:type="object">Amasty\PixelTikTok\Model\Event\Events\NewsletterSubscribeEvent</item>
                <item name="tiktok_add_payment_info"
                      xsi:type="object">Amasty\PixelTikTok\Model\Event\Events\AddPaymentInfo</item>
            </argument>
        </arguments>
    </type>

    <!-- Collectors Configuration Start -->
    <virtualType name="Amasty\PixelTikTok\Model\Collector\Checkout\ApiAddPaymentInfoCollector"
                 type="Amasty\PixelTikTok\Model\Collector\Checkout\AddPaymentInfoCollector">
        <arguments>
            <argument name="configEventName" xsi:type="string">api.add_payment_info</argument>
        </arguments>
    </virtualType>
    <virtualType name="Amasty\PixelTikTok\Model\Collector\Customer\ApiSubscribeCollector"
                 type="Amasty\PixelTikTok\Model\Collector\Customer\SubscribeCollector">
        <arguments>
            <argument name="configEventName" xsi:type="string">api.newsletter_subscribe</argument>
        </arguments>
    </virtualType>
    <virtualType name="Amasty\PixelTikTok\Model\Collector\Customer\ApiCompleteRegistrationCollector"
                 type="Amasty\PixelTikTok\Model\Collector\Customer\CompleteRegistrationCollector">
        <arguments>
            <argument name="configEventName" xsi:type="string">api.complete_registration</argument>
        </arguments>
    </virtualType>

    <!-- CollectorConfig declaration -->
    <virtualType name="TikTokPixelAddPaymentInfoCollector" type="Amasty\PixelCore\Model\Collector\Config\CollectorConfig">
        <arguments>
            <argument name="collectorClass" xsi:type="string">Amasty\PixelTikTok\Model\Collector\Checkout\AddPaymentInfoCollector</argument>
            <argument name="storageType" xsi:type="string">session</argument>
        </arguments>
    </virtualType>
    <virtualType name="TikTokApiAddPaymentInfoCollector" type="Amasty\PixelCore\Model\Collector\Config\CollectorConfig">
        <arguments>
            <argument name="collectorClass" xsi:type="string">Amasty\PixelTikTok\Model\Collector\Checkout\ApiAddPaymentInfoCollector</argument>
            <argument name="storageType" xsi:type="string">tiktok_server</argument>
        </arguments>
    </virtualType>
    <virtualType name="TikTokPixelSubscribeCollector" type="Amasty\PixelCore\Model\Collector\Config\CollectorConfig">
        <arguments>
            <argument name="collectorClass" xsi:type="string">Amasty\PixelTikTok\Model\Collector\Customer\SubscribeCollector</argument>
            <argument name="storageType" xsi:type="string">session</argument>
        </arguments>
    </virtualType>
    <virtualType name="TikTokApiSubscribeCollector" type="Amasty\PixelCore\Model\Collector\Config\CollectorConfig">
        <arguments>
            <argument name="collectorClass" xsi:type="string">Amasty\PixelTikTok\Model\Collector\Customer\ApiSubscribeCollector</argument>
            <argument name="storageType" xsi:type="string">tiktok_server</argument>
        </arguments>
    </virtualType>
    <virtualType name="TikTokPixelCompleteRegistrationCollector" type="Amasty\PixelCore\Model\Collector\Config\CollectorConfig">
        <arguments>
            <argument name="collectorClass" xsi:type="string">Amasty\PixelTikTok\Model\Collector\Customer\CompleteRegistrationCollector</argument>
            <argument name="storageType" xsi:type="string">session</argument>
        </arguments>
    </virtualType>
    <virtualType name="TikTokApiCompleteRegistrationCollector" type="Amasty\PixelCore\Model\Collector\Config\CollectorConfig">
        <arguments>
            <argument name="collectorClass" xsi:type="string">Amasty\PixelTikTok\Model\Collector\Customer\ApiCompleteRegistrationCollector</argument>
            <argument name="storageType" xsi:type="string">tiktok_server</argument>
        </arguments>
    </virtualType>
    <type name="Amasty\PixelCore\Model\Collector\CollectorsConfigPool">
        <arguments>
            <argument name="collectorsConfig" xsi:type="array">
                <item name="tiktok_add_payment_info" xsi:type="array">
                    <item name="tiktok_pixel_add_payment_info" xsi:type="object">TikTokPixelAddPaymentInfoCollector</item>
                    <item name="tiktok_api_add_payment_info" xsi:type="object">TikTokApiAddPaymentInfoCollector</item>
                </item>
                <item name="customer_register" xsi:type="array">
                    <item name="tiktok_pixel_registration_complete" xsi:type="object">TikTokPixelCompleteRegistrationCollector</item>
                    <item name="tiktok_api_registration_complete" xsi:type="object">TikTokApiCompleteRegistrationCollector</item>
                </item>
                <item name="tiktok_newsletter_subscribe" xsi:type="array">
                    <item name="tiktok_pixel_newsletter_subscribe" xsi:type="object">TikTokPixelSubscribeCollector</item>
                    <item name="tiktok_api_newsletter_subscribe" xsi:type="object">TikTokApiSubscribeCollector</item>
                </item>
            </argument>
        </arguments>
    </type>
    <!-- Collectors Configuration End -->

    <type name="Magento\Checkout\Api\GuestPaymentInformationManagementInterface">
        <plugin name="Amasty_PixelTikTok::dispatchAddPaymentInfoEvent"
                type="Amasty\PixelTikTok\Plugin\Checkout\Api\GuestPaymentInformationManagementInterface\DispatchAddPaymentInfoEvent"/>
    </type>
    <type name="Magento\Checkout\Api\PaymentInformationManagementInterface">
        <plugin name="Amasty_PixelTikTok::dispatchAddPaymentInfoEvent"
                type="Amasty\PixelTikTok\Plugin\Checkout\Api\PaymentInformationManagementInterface\DispatchAddPaymentInfoEvent"/>
    </type>
    <type name="Magento\Newsletter\Model\SubscriptionManagerInterface">
        <plugin name="Amasty_PixelTikTok::dispatchNewsletterSubscriptionWebapi"
                type="Amasty\PixelTikTok\Plugin\Newsletter\Model\SubscriptionManagerInterface\DispatchNewsletterSubscription"/>
    </type>
</config>
