/**
 * Created by Alex on 30/11/2016.
 */

function GatewayManager( elem ) {
    var self = this;

    self.init = function() {
        self.tabs = $( elem );
        self.dropdown = $( '#payment-dropdown' );

        self.tabs.on( 'show.bs.tab', self.tabChanged.bind( self ) );
        self.dropdown.on('change', self.dropdownChanged)

        self.changeBuyButton();

        window.onresize = function(event) {
            self.togglePaymentMethodsUI();
        };
    };

    self.tabChanged = function( e ) {
        var gateway = $( e.currentTarget ).attr( 'data-gateway' );
        var gatewayType = $(e.currentTarget).attr('data-gateway-type');
        $( "#gateway-name" ).data('value', gateway);
        $( "input#gateway-type" ).val(gatewayType);

        $( "#frmOrder" ).trigger( 'data:capture' );

        if( $( e.currentTarget ).closest( '#payment-tabs' ).find( '.payment-tab input:radio' ).length ) {
            $( e.currentTarget ).closest( '#payment-tabs' ).find( '.payment-tab input:radio' ).removeAttr( "checked" );
            $( e.currentTarget ).find( 'input:radio' ).prop( 'checked', true );
        }

        if( $( e.currentTarget ).attr( 'data-gateway-type' ) != "cc" ) {
            $( "#stripe-form input, #stripe-form select" ).attr( "disabled", "disabled" );
        } else {
            $( "#stripe-form input, #stripe-form select" ).removeAttr( "disabled" );
        }

        self.changeBuyButton();

       setTimeout( function() {
           // it needed to resize embed form in iFrame
           $(window).trigger('resize');
       }, 700)
    };

    self.dropdownChanged = function( e ) {
        $( '#payment-tabs a[data-gateway-type="' + $( this ).val() + '"]' ).trigger( 'click' );
    };

    self.changeBuyButton = function() {
        if( !$( "#gateway-name" ).length ) {
            return;
        }

        setTimeout( function() {
            $('#payment-dropdown').html('');

            $( 'ul#payment-tabs li:not([style*="display: none"]):not([style*="display:none"])' ).each( function() {
                var $tab = $( this ).find( '> a' );

                var gateway_type = $tab.data( 'gateway-type' );
                var is_selected  = $tab.hasClass( 'active' );
                var content      = $tab.html();
                var title        = $tab.data( 'title' );

                $( '#payment-dropdown' ).append( '<option' +
                    '   value="' + gateway_type + '"' +
                    '   data-content=\'' + content + ' ' + title + '\'' +
                    '   ' + (is_selected ? 'selected' : '') + '>' +
                    title +
                    '</option>'
                );
            } );

            setTimeout( function() {
                $( '#payment-dropdown' ).selectpicker( 'refresh' );
            }, 100);

            self.togglePaymentMethodsUI();
        }, 100 );

        if($( '#action-button-paypal, #action-button' ).hasClass('duplicate-purchase')) {
            $( '#action-button-paypal, #action-button' ).hide().addClass('d-none');
            return;
        }

        if ($('#gateway-type').val() === 'apple-pay') {
            self.showApplePayButton();

            return;
        }

        if ($('#gateway-type').val() === 'google-pay') {
            self.showGooglePayButton();

            return;
        }

        switch ($("#gateway-name").data('value').toLowerCase()) {
            case "paypalmarketplace":
            case "paypalvault":
                self.showPPBuyButton();
                break;

            case "braintree_paypal":
                if( typeof braintree === 'undefined' ) {
                    self.showNormalBuyButton();
                } else {
                    self.showPPBuyButton();
                }
                break;

            default:
                self.showNormalBuyButton();
                break;
        }
    };

    self.togglePaymentMethodsUI = function() {
        if( $( window ).width() <= 768 || $( '#payment-dropdown option' ).length < 5 ) {
            $( '.payment-dropdown.bootstrap-select.btn-group' ).addClass( 'd-none hide' );
            $( 'ul#payment-tabs' ).removeClass( 'd-none hide' );
        } else {
            $( '.payment-dropdown.bootstrap-select.btn-group' ).removeClass( 'd-none hide' );
            $( 'ul#payment-tabs' ).addClass( 'd-none hide' );
        }
    };

    self.showPPBuyButton = function() {
        $( '#action-button-paypal' ).addClass('show-submit-button').removeClass('hide-submit-button');
        $( '#action-button' ).addClass('hide-submit-button').removeClass('show-submit-button');
        $( '#action-button-applepay' ).addClass('hide-submit-button').removeClass('show-submit-button');
        $( '#action-button-googlepay' ).addClass('hide-submit-button').removeClass('show-submit-button');
    };

    self.showNormalBuyButton = function() {
        $( '#action-button-paypal' ).addClass('hide-submit-button').removeClass('show-submit-button');
        $( '#action-button' ).addClass('show-submit-button').removeClass('hide-submit-button');
        $( '#action-button-applepay' ).addClass('hide-submit-button').removeClass('show-submit-button');
        $( '#action-button-googlepay' ).addClass('hide-submit-button').removeClass('show-submit-button');
    };

    self.showApplePayButton = function() {
        $( '#action-button-paypal' ).addClass('hide-submit-button').removeClass('show-submit-button');
        $( '#action-button' ).addClass('hide-submit-button').removeClass('show-submit-button');
        $( '#action-button-applepay' ).addClass('show-submit-button').removeClass('hide-submit-button');
        $( '#action-button-googlepay' ).addClass('hide-submit-button').removeClass('show-submit-button');
    };

    self.showGooglePayButton = function() {
        $( '#action-button-paypal' ).addClass('hide-submit-button').removeClass('show-submit-button');
        $( '#action-button' ).addClass('hide-submit-button').removeClass('show-submit-button');
        $( '#action-button-applepay' ).addClass('hide-submit-button').removeClass('show-submit-button');
        $( '#action-button-googlepay' ).addClass('show-submit-button').removeClass('hide-submit-button');
    };

    self.grabMessengerUserRef = function() {
        if( typeof SgC !== "undefined" && SgC.checkStatus === "checked" && SgC.user_ref != undefined ) {
            SgC.confirmOptIn();

            $( '<input>' ).attr( {
                type : 'hidden',
                name : 'messenger_user_ref',
                value: SgC.user_ref
            } ).appendTo( $( "#frmOrder" ) );
        }
    };

    self.init();
}
