<?xml version="1.0"?>
<!--
/**
 * MageSpecialist
 *
 * 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
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to info@magespecialist.it so we can send you a copy immediately.
 *
 * @category   MSP
 * @package    MSP_ReCaptcha
 * @copyright  Copyright (c) 2017 Skeeller srl (http://www.magespecialist.it)
 * @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\Checkout\Block\Onepage">
        <arguments>
            <argument name="layoutProcessors" xsi:type="array">
                <item name="msp_recaptcha" xsi:type="object">\MSP\ReCaptcha\Block\LayoutProcessor\Checkout\Onepage</item>
            </argument>
        </arguments>
    </type>

    <!-- User login -->
    <virtualType name="MSP\ReCaptcha\Model\Provider\Failure\LoginObserver"
                 type="MSP\ReCaptcha\Model\Provider\Failure\ObserverRedirectFailure">
        <arguments>
            <argument name="redirectUrlProvider"
                      xsi:type="object">MSP\ReCaptcha\Model\Provider\Failure\RedirectUrl\BeforeAuthUrlProvider</argument>
        </arguments>
    </virtualType>
    <virtualType name="MSP\ReCaptcha\Model\Provider\IsCheckRequired\Frontend\Login"
                 type="MSP\ReCaptcha\Model\IsCheckRequired">
        <arguments>
            <argument name="enableConfigFlag"
                      xsi:type="string">msp_securitysuite_recaptcha/frontend/enabled_login</argument>
            <argument name="area" xsi:type="string">frontend</argument>
        </arguments>
    </virtualType>
    <virtualType name="MSP\ReCaptcha\Observer\Frontend\LoginObserver"
                 type="MSP\ReCaptcha\Observer\ReCaptchaObserver">
        <arguments>
            <argument name="isCheckRequired"
                      xsi:type="object">MSP\ReCaptcha\Model\Provider\IsCheckRequired\Frontend\Login</argument>
            <argument name="failureProvider"
                      xsi:type="object">MSP\ReCaptcha\Model\Provider\Failure\LoginObserver</argument>
        </arguments>
    </virtualType>

    <!-- Forgot password -->
    <virtualType name="MSP\ReCaptcha\Model\Provider\Failure\RedirectUrl\ForgotPassword"
                 type="MSP\ReCaptcha\Model\Provider\Failure\RedirectUrl\SimpleUrlProvider">
        <arguments>
            <argument name="urlPath" xsi:type="string">*/*/forgotpassword</argument>
            <argument name="urlParams" xsi:type="array">
                <item name="_secure" xsi:type="boolean">true</item>
            </argument>
        </arguments>
    </virtualType>
    <virtualType name="MSP\ReCaptcha\Model\Provider\Failure\ForgotPasswordObserver"
                 type="MSP\ReCaptcha\Model\Provider\Failure\ObserverRedirectFailure">
        <arguments>
            <argument name="redirectUrlProvider"
                      xsi:type="object">MSP\ReCaptcha\Model\Provider\Failure\RedirectUrl\ForgotPassword</argument>
        </arguments>
    </virtualType>
    <virtualType name="MSP\ReCaptcha\Model\Provider\IsCheckRequired\Frontend\ForgotPassword"
                 type="MSP\ReCaptcha\Model\IsCheckRequired">
        <arguments>
            <argument name="enableConfigFlag"
                      xsi:type="string">msp_securitysuite_recaptcha/frontend/enabled_forgot</argument>
            <argument name="area" xsi:type="string">frontend</argument>
        </arguments>
    </virtualType>
    <virtualType name="MSP\ReCaptcha\Observer\Frontend\ForgotPasswordObserver"
                 type="MSP\ReCaptcha\Observer\ReCaptchaObserver">
        <arguments>
            <argument name="isCheckRequired"
                      xsi:type="object">MSP\ReCaptcha\Model\Provider\IsCheckRequired\Frontend\ForgotPassword</argument>
            <argument name="failureProvider"
                      xsi:type="object">MSP\ReCaptcha\Model\Provider\Failure\ForgotPasswordObserver</argument>
        </arguments>
    </virtualType>

    <!-- Create User -->
    <virtualType name="MSP\ReCaptcha\Model\Provider\Failure\RedirectUrl\CreateUser"
                 type="MSP\ReCaptcha\Model\Provider\Failure\RedirectUrl\SimpleUrlProvider">
        <arguments>
            <argument name="urlPath" xsi:type="string">*/*/create</argument>
            <argument name="urlParams" xsi:type="array">
                <item name="_secure" xsi:type="boolean">true</item>
            </argument>
        </arguments>
    </virtualType>
    <virtualType name="MSP\ReCaptcha\Model\Provider\Failure\CreateUserObserver"
                 type="MSP\ReCaptcha\Model\Provider\Failure\ObserverRedirectFailure">
        <arguments>
            <argument name="redirectUrlProvider"
                      xsi:type="object">MSP\ReCaptcha\Model\Provider\Failure\RedirectUrl\CreateUser</argument>
        </arguments>
    </virtualType>
    <virtualType name="MSP\ReCaptcha\Model\Provider\IsCheckRequired\Frontend\CreateUser"
                 type="MSP\ReCaptcha\Model\IsCheckRequired">
        <arguments>
            <argument name="enableConfigFlag"
                      xsi:type="string">msp_securitysuite_recaptcha/frontend/enabled_create</argument>
            <argument name="area" xsi:type="string">frontend</argument>
        </arguments>
    </virtualType>
    <virtualType name="MSP\ReCaptcha\Observer\Frontend\CreateUserObserver"
                 type="MSP\ReCaptcha\Observer\ReCaptchaObserver">
        <arguments>
            <argument name="isCheckRequired"
                      xsi:type="object">MSP\ReCaptcha\Model\Provider\IsCheckRequired\Frontend\CreateUser</argument>
            <argument name="failureProvider"
                      xsi:type="object">MSP\ReCaptcha\Model\Provider\Failure\CreateUserObserver</argument>
        </arguments>
    </virtualType>

    <!-- Contact Form -->
    <virtualType name="MSP\ReCaptcha\Model\Provider\Failure\RedirectUrl\ContactForm"
                 type="MSP\ReCaptcha\Model\Provider\Failure\RedirectUrl\SimpleUrlProvider">
        <arguments>
            <argument name="urlPath" xsi:type="string">contact/index/index</argument>
        </arguments>
    </virtualType>
    <virtualType name="MSP\ReCaptcha\Model\Provider\Failure\ContactFormObserver"
                 type="MSP\ReCaptcha\Model\Provider\Failure\ObserverRedirectFailure">
        <arguments>
            <argument name="redirectUrlProvider"
                      xsi:type="object">MSP\ReCaptcha\Model\Provider\Failure\RedirectUrl\ContactForm</argument>
        </arguments>
    </virtualType>
    <virtualType name="MSP\ReCaptcha\Model\Provider\IsCheckRequired\Frontend\ContactForm"
                 type="MSP\ReCaptcha\Model\IsCheckRequired">
        <arguments>
            <argument name="enableConfigFlag"
                      xsi:type="string">msp_securitysuite_recaptcha/frontend/enabled_contact</argument>
            <argument name="area" xsi:type="string">frontend</argument>
        </arguments>
    </virtualType>
    <virtualType name="MSP\ReCaptcha\Observer\Frontend\ContactFormObserver"
                 type="MSP\ReCaptcha\Observer\ReCaptchaObserver">
        <arguments>
            <argument name="isCheckRequired"
                      xsi:type="object">MSP\ReCaptcha\Model\Provider\IsCheckRequired\Frontend\ContactForm</argument>
            <argument name="failureProvider"
                      xsi:type="object">MSP\ReCaptcha\Model\Provider\Failure\ContactFormObserver</argument>
        </arguments>
    </virtualType>

    <!-- AjaxLogin Form -->
    <virtualType name="MSP\ReCaptcha\Observer\Frontend\AjaxLoginObserver"
                 type="MSP\ReCaptcha\Observer\ReCaptchaObserver">
        <arguments>
            <argument name="isCheckRequired"
                      xsi:type="object">MSP\ReCaptcha\Model\Provider\IsCheckRequired\Frontend\Login</argument>
            <argument name="responseProvider"
                      xsi:type="object">MSP\ReCaptcha\Model\Provider\Response\AjaxResponseProvider</argument>
            <argument name="failureProvider"
                      xsi:type="object">MSP\ReCaptcha\Model\Provider\Failure\AjaxResponseFailure</argument>
        </arguments>
    </virtualType>
    
    <type name="Magento\Customer\Block\Account\AuthenticationPopup">
        <plugin sortOrder="1" name="mSPReCaptchaAuthenticationPopup"
                type="MSP\ReCaptcha\Plugin\Block\Account\AuthenticationPopupPlugin"/>
    </type>

    <!-- Send to Friend Form -->
    <virtualType name="MSP\ReCaptcha\Observer\Frontend\SendFriendObserver"
                 type="MSP\ReCaptcha\Observer\ReCaptchaObserver">
        <arguments>
            <argument name="isCheckRequired"
                      xsi:type="object">MSP\ReCaptcha\Model\Provider\IsCheckRequired\Frontend\SendFriendForm</argument>
            <argument name="responseProvider"
                      xsi:type="object">MSP\ReCaptcha\Model\Provider\Response\DefaultResponseProvider</argument>
            <argument name="failureProvider"
                      xsi:type="object">MSP\ReCaptcha\Model\Provider\Failure\SendFriendObserver</argument>
        </arguments>
    </virtualType>
    <virtualType name="MSP\ReCaptcha\Model\Provider\IsCheckRequired\Frontend\SendFriendForm"
                 type="MSP\ReCaptcha\Model\IsCheckRequired">
        <arguments>
            <argument name="enableConfigFlag"
                      xsi:type="string">msp_securitysuite_recaptcha/frontend/enabled_sendfriend</argument>
            <argument name="area" xsi:type="string">frontend</argument>
        </arguments>
    </virtualType>
    <virtualType name="MSP\ReCaptcha\Model\Provider\Failure\SendFriendObserver"
                 type="MSP\ReCaptcha\Model\Provider\Failure\ObserverRedirectFailure">
        <arguments>
            <argument name="redirectUrlProvider"
                      xsi:type="object">MSP\ReCaptcha\Model\Provider\Failure\RedirectUrl\ReferrerUrlProvider</argument>
        </arguments>
    </virtualType>

    <!-- Review Form -->
    <virtualType name="MSP\ReCaptcha\Model\Provider\Failure\ReviewFormObserver"
                 type="MSP\ReCaptcha\Model\Provider\Failure\ObserverRedirectFailure">
        <arguments>
            <argument name="redirectUrlProvider"
                      xsi:type="object">MSP\ReCaptcha\Model\Provider\Failure\RedirectUrl\RefererProvider</argument>
        </arguments>
    </virtualType>
    <virtualType name="MSP\ReCaptcha\Model\Provider\IsCheckRequired\Frontend\ReviewForm"
                 type="MSP\ReCaptcha\Model\IsCheckRequired">
        <arguments>
            <argument name="enableConfigFlag"
                      xsi:type="string">msp_securitysuite_recaptcha/frontend/enabled_review</argument>
            <argument name="area" xsi:type="string">frontend</argument>
        </arguments>
    </virtualType>
    <virtualType name="MSP\ReCaptcha\Observer\Frontend\ReviewFormObserver"
                 type="MSP\ReCaptcha\Observer\ReCaptchaObserver">
        <arguments>
            <argument name="isCheckRequired"
                      xsi:type="object">MSP\ReCaptcha\Model\Provider\IsCheckRequired\Frontend\ReviewForm</argument>
            <argument name="failureProvider"
                      xsi:type="object">MSP\ReCaptcha\Model\Provider\Failure\ReviewFormObserver</argument>
        </arguments>
    </virtualType>

    <!-- Newsletter -->
    <virtualType name="MSP\ReCaptcha\Model\Provider\IsCheckRequired\Frontend\Newsletter"
                 type="MSP\ReCaptcha\Model\IsCheckRequired">
        <arguments>
            <argument name="enableConfigFlag"
                      xsi:type="string">msp_securitysuite_recaptcha/frontend/enabled_newsletter</argument>
            <argument name="area" xsi:type="string">frontend</argument>
        </arguments>
    </virtualType>
    <virtualType name="MSP\ReCaptcha\Model\Provider\Failure\NewsletterObserver"
                 type="MSP\ReCaptcha\Model\Provider\Failure\ObserverRedirectFailure">
        <arguments>
            <argument name="redirectUrlProvider"
                      xsi:type="object">MSP\ReCaptcha\Model\Provider\Failure\RedirectUrl\ReferrerUrlProvider</argument>
        </arguments>
    </virtualType>
    <virtualType name="MSP\ReCaptcha\Observer\Frontend\NewsletterObserver"
                 type="MSP\ReCaptcha\Observer\ReCaptchaObserver">
        <arguments>
            <argument name="isCheckRequired"
                      xsi:type="object">MSP\ReCaptcha\Model\Provider\IsCheckRequired\Frontend\Newsletter</argument>
            <argument name="responseProvider"
                      xsi:type="object">MSP\ReCaptcha\Model\Provider\Response\DefaultResponseProvider</argument>
            <argument name="failureProvider"
                      xsi:type="object">MSP\ReCaptcha\Model\Provider\Failure\NewsletterObserver</argument>
        </arguments>
    </virtualType>
</config>
