var ShoperInBankClass = function(app){
 
    var windowsWithStart = $( window ).width();
  
    var vars = {
        cdebug : false,		
        lang: 'pl_PL',
        appPurl : '',
        appName : '',
        shopid:'',
        shopurl: '',
        shoplngid: '',         
    };
    
    var root = this;
 
    /*
     * Constructor
     */
    this.construct = function(app){      	      	        
		vars.appPurl = atob(app);
    };
	
    
    /*
     * Public method
     * Can be called outside class
     */
    this.init  = function(callback){
        root.printDebug('init start');
		
		let isInitPart = false;
		if($('body.shop_index').length){
			let url = new URL(window.location.href);
			let paymentStatus = url.searchParams.get("inbankpaymentstatus");
			
			if(paymentStatus != ''){
				let getdata = {shopid:vars.shopid, shoplngid:vars.shoplngid, inbankpaymentstatus:paymentStatus};
				$.when(				
					root.loadDataJson('ajax/getShopInbankPaymentStatus.html', 'GET', getdata)
				).then(function(result) {
					if(result.status == "ok"){
						let msghtml = '
';
						msghtml += result.data;
						msghtml += '
 ';
						
						
						if($('body.shop_index .wrap').find('div.top')!= 'undefined'){
							$('body.shop_index .wrap').find('div.top').before(msghtml);
						}
						else{
							$('body.shop_index .wrap').find('div.main').before(msghtml);
						}
					}
				});
			
				
				
				
			}
		}
		
		if($('body.shop_basket_done').length && $('.inbankpayment').length){
			isInitPart = true;
			root.printDebug('is shop basket done');
			
			//
			$('.inbankpayment .payment-info').append('');
			let getdata = {shopid:vars.shopid, shoplngid:vars.shoplngid};
			$.when(				
				root.loadDataJson('ajax/getShopInbankPaymentMessages.html', 'GET', getdata)
			).then(function(result) {
				
				root.printDebug('get payment messages');
				
				if(result.status == "ok"){
					root.printDebug('get payment messages - ok');
					$('.inbankpayment .payment-info-addmsg').html(result.data.msg1);
					$('.inbankpayment .payment-info-addmsg2').html(result.data.msg2);
					
				}
			});
			
			
			let orderdata = {shopid:vars.shopid, shoplngid:vars.shoplngid, orderid:$('.inbankpayment').data('orderid'),sum1:$('.inbankpayment').data('sum1'), sum2:$('.inbankpayment').data('sum2'), email:$('.inbankpayment').data('email')};	
			root.printDebugV(orderdata);
			
			let loaderH = '';
			$('.inbankpayment .payment-button').html(loaderH);
			
			//przetwarzanie
			$.when(				
                root.loadDataJson('ajax/checkInBankPayment.html', 'POST', orderdata)
            ).then(function(result) { 
				console.log(result);
				
				if(result.status == "ok" && result.data.redirect_url != 'undefined'){
					root.printDebug('Basket done result - OK');
					console.log(result.data.redirect_url);
										
					
					$('.inbankpayment .payment-button').html('Złóż wniosek');
				}
				else{
					root.printDebug('Basket done result');
					root.printDebugV(result);
				}
			});
		}
		
		//obsluga koszyka
		if($('body.shop_basket').length){
			root.printDebug('is shop basket');
			
			isInitPart = true;
			
			$.when(				
                getShopProductsAll()
            ).then(function(result) { 
				
				if(result.status == "ok"){
					let rdata = result.data;
					
					let addDesc = '';
					
					if(result.translate.length != 'undefined'){
						
						$.each(result.translate, function( index, value ) {
							addDesc += '

'+value+'
';
						});
					}
					
					addDesc += '
 ';
					
					$.each(rdata, function( index, value ) {
						//console.log(value);
						
						
						if(value.inbank_product_shoper_payment_id > 0){
																				
							let payId = '#payment_'+value.inbank_product_shoper_payment_id;														
							
							
							if($('.summary-container .sum .value').length != 'undefined'){
								
								let sumorder = $('.summary-container .sum .value').text();
								sumorder = sumorder.replace(/\s+/g, '');					
								sumorder = sumorder.match(/\d+(?:\,.\d+)?/g);
								
								let sumorderm = sumorder[0].replace(',', '.');
								console.log(sumorderm);
								console.log(value.inbank_payment_order_min_ammount);
								console.log(parseFloat(sumorderm) > parseFloat(value.inbank_payment_order_max_ammount));
								
								if((parseFloat(sumorderm) < parseFloat(value.inbank_payment_order_min_ammount)) || (parseFloat(sumorderm) > parseFloat(value.inbank_payment_order_max_ammount))){
									
									let paymentinbank = $(payId).parent().parent().parent();
									let paymentcontainer = paymentinbank.parent();
									//console.log(paymentinbank);
									
									paymentinbank.remove();									
									if(paymentinbank.hasClass('selected')){
										//console.log('sssssssssssss');
										
										$.each( paymentcontainer.find('.payment'), function( index, value ){
											$(this).addClass('selected');
											$(this).find('input[type=radio]').prop( "checked", true );
										});																				
									}
									
									
								}
								else{
									if($(payId).length){
										let payDesc = $(payId).parent().parent().find('.description').html();
										let paytitle = $(payId).parent().parent().find('>label').html();
										
										if(value.inbank_payment_title != 'undefined'){
											
											paytitle = value.inbank_payment_title;
										}
										
										//add inbank logo
										let imgurl = vars.appPurl + 'public/assets/images/svg/calc_logo_small/inbank-logo.svg';
										
										paytitle += '
';
										
										$(payId).parent().parent().find('>label').html(paytitle);															
										$(payId).parent().parent().find('.description').html(addDesc);
										
										console.log( value);
									}
									$.when(	getShopInBankProductCalcs(value.sinp_id, sumorder[0])).then(function(resultcalc) {
										//console.log(resultcalc);
										if(result.status == "ok"){
											//console.log(resultcalc.data);
											//$(payId).parent().parent().find('.description').prepend('sssssssssssssssssssss');
											$(payId).parent().parent().find('.description').prepend( resultcalc.data.product_template);
										}
									});
								}
							}
							
						}
						
						
					});
					console.log(result);
				}
						 
			});
		}
		
        //sprawdzenie czy jestesmy na karcie produktu
        if($('body.shop_product').length){
			root.printDebug('is shop product');
            let product_id = $('body').attr('id');
            
			
			
            if(product_id != 'undefined'){
                isInitPart = true;
                product_id = product_id.replace( /^\D+/g, '');
               
                getCalculations(product_id);
            }
                
        }
		
		if(isInitPart == true){
			var addCss = root.getCss();
			if(typeof addCss != 'undefined' && addCss != ''){
				$('body').append('');
			} 		
		}
		if (typeof(callback) == 'function') {
			callback();
		}
        
    }
    this.getCss = function(){
		root.printInfo('start getCss');
        
        vars.css = '.inbank-container .inbank--calculator.logo-small{} .inbank-container .inbank--calculator .inbank__img{float:left;margin-top:10px;}.inbank-container .inbank--calculator .inbank__message{float:left;margin-left:5px;line-height:44px;}';
		vars.css += '.inbank-basket-assets img{width: 17px;float:left;margin-right:10px;}.inbank-basket-assets p{font-size:12px;}';
		vars.css += '.inbank-basket-assets{margin-left:5px}'
		//basket done
		vars.css += '.inbankpayment{text-align:center;} .inbankpayment .payment-info-addmsg{margin-top:20px;} .inbankpayment .payment-info-addmsg p{margin-bottom:5px;} .inbankpayment .payment-button{margin:20px 0px;}';
		vars.css += '.payment-button a.btn-red{padding:10px 45px;font-size:25px;}';
		vars.css += '.inbankpayment .payment-info-addmsg2 p{font-size:14px;}';
		
		vars.css += '.payment .inbank-logo{margin-left:5px;padding-left: 5px;border-left: 2px solid #000;}';
		
		vars.css += '.inbank--calculator{margin-left:5px;margin-bottom: 10px;} .inbank--calculator .inbank__message{font-weight:bold;}.justify-content-center {justify-content: center !important;}';
		
		vars.css += '.loaderinbank {margin-top: 1rem;margin-bottom: 1rem;height: auto;background-color: transparent;}';
		vars.css += '.loader-container {position: relative;display: inline-block;height: 71px;width: 71px;margin-right: 1rem;}';
		vars.css += '.loader-logo {position: absolute;left: 0;right: 0;top: 0;bottom: 0;margin: auto;width: 73px;}';
		vars.css += '.loader-circle {width:44px; min-width:44px; height:44px; min-height:44px; display:flex; align-items:center; margin:auto; border-radius:50%; -webkit-transform:translateZ(0); -ms-transform:translateZ(0); transform:translateZ(0); -webkit-animation:loader .8s infinite linear;animation:loader .8s infinite linear; border-top:5px solid rgba(255,255,255,0); border-right:5px solid #7a1d8e; border-bottom:5px solid #7a1d8e; border-left:5px solid #7a1d8e; margin-right:1em}';
		vars.css += '.loader-circle--large {width: 73px;min-width: 73px;    height: 73px;    min-height: 73px;    border-top: 5px solid rgba(255,255,255,0);    border-right: 5px solid #97d700;border-bottom: 5px solid #97d700;border-left: 5px solid #97d700;position: absolute;left: -5px;bottom: 0;top: 0;margin-right: 0;}';
		vars.css += '@keyframes loader { 0% {  -webkit-transform:rotate(0);  transform:rotate(0) } 100% {  -webkit-transform:rotate(360deg);  transform:rotate(360deg) }}';
		root.printInfo('end getCss');
		return(vars.css);
		
	};
	
    this.setAppUrl = function(appPurl){
        vars.appPurl = appPurl;
    };
    
    this.getShopId = function(){
            return(vars.shopid);
    };
    this.getShopLangId = function(){
            return(vars.shoplngid);
    };
    this.loadOptions = function(options){
      	      	
        $.extend(vars , options);    
        if(typeof vars.aplication_debug != 'undefined'){
            if(vars.aplication_debug == '1'){
                vars.cdebug = true;
            }
        }   
        
		root.printDebug('option list');
        root.printDebugV(vars);
    }; 
 
    this.printInfo = function(info) {
       console.log(vars.appName +' : ' + info);        
    };
    this.printDebug = function(info) {
       if(vars.cdebug == true){
          console.log(vars.appName +' : ' + info);   
        }       
    }; 
    
    this.printDebugV = function(info) {
       if(vars.cdebug == true){
          console.log(info);
        }       
    };    
    this.checkFrontApi = function (){
        var me = this;
        me.defer = new $.Deferred();
        me.index = 0;
        if(typeof frontAPI !='undefined'){
            clearInterval(me.interval);
            me.defer.resolve();
            return me.defer;
        }  
        me.interval = setInterval(function() {
            print('check front api - ' + typeof frontAPI );
            if(typeof frontAPI !='undefined'){
                clearInterval(me.interval);
                me.defer.resolve();
            }        
        }, 200);
       return me.defer;     
    }
	
    this.displayReturnForm = function(info) {
        
    }; 
    
    this.loadShopConfig = function(){
		let adata = {shopid:vars.shopid, shoplngid:vars.shoplngid};
        root.printDebugV(adata);
        return(this.loadDataJson('ajax/getShopConfig.html', 'GET', {shopid:vars.shopid, shoplngid:vars.shoplngid}));
    };	
    this.loadDataJson = function (url, ctype, cdata) {
        let lUrl = vars.appPurl + url;
        
        root.printDebugV(lUrl);
        return(jQuery.ajax({
            url: lUrl,
            type: ctype,
            data: cdata,
            async: true,
            jsonp: 'jsonp'
        }));
    }
	
    /*
     * Private method
     */
	var getShopInBankProductCalcs = function(inbankproduct_id, productamount){
        
        let adata = {shopid:vars.shopid, shoplngid:vars.shoplngid, inbankproductid:inbankproduct_id, amount:productamount};
        root.printDebugV(adata);
        return(root.loadDataJson('ajax/getShopInbankProductCalc.html', 'GET', adata));
    }
	
    var getShopProductsCalcs = function(product_id, productamount){
        
        let adata = {shopid:vars.shopid, shoplngid:vars.shoplngid, shopproductid:product_id, amount:productamount};
        root.printDebugV(adata);
        return(root.loadDataJson('ajax/getShopProductsCalc.html', 'GET', adata));
    }    
	
	var getShopProductsAll = function(){
        
        let adata = {shopid:vars.shopid, shoplngid:vars.shoplngid};
        root.printDebugV(adata);
        return(root.loadDataJson('ajax/getShopProducts.html', 'GET', adata));
    }
	
	
    var checkFrontApi = function(counter){
        setTimeout(
            function() 
            {
              if(typeof frontAPI !='undefined'){
                    return(true);                      
              }
              else{
                if(counter > 3){
                    return(false);
                }
                else{
                    return(checkFrontApi(counter + 1));
                }
              }
        }, 200);          
    };
    
	//var checked
	var checkPriceAfterChange = function(){
		
	};
	
	var getCalculations = function(product_id){
		if(parseInt(product_id) != 'NaN'){
			root.printDebug('Found product id:'+product_id);
			let productamount = null;
			
			/*
			if($('.shop_product').find('div.basket div.price del').length > 0 && !$('.shop_product').find('div.basket div.price del').hasClass('none')){
				root.printDebug('is del price');
				productamount = $('.shop_product').find('div.basket div.price del').text();
			}
			else */
			
			if($('.shop_product').find('div.basket .price em.main-price').length > 0){
				root.printDebug('is main price');
				productamount = $('.shop_product').find('div.basket .price em.main-price').text();                        
			}
			
			productamount = productamount.replace(/\s+/g, '');					
			productamount = productamount.match(/\d+(?:\,.\d+)?/g);
			
			
			if(productamount.length == 0){
				root.printInfo('error product price');
			}
			root.printDebugV(productamount[0]);
			
			$.when(				
				getShopProductsCalcs(product_id, productamount[0])
			).then(function(result) {  
				root.printDebugV(result);
				 if(result.status == "ok"){
					let rdata = result.data;
					$.each(rdata, function( index, value ) {
						
						if(value != null){
							//product_page_possition
							if(value.product_page_possition == 'calc-pos-beforeaddtocartbutton'){
								//console.log(value.product_page_possition);
								$('body.shop_product #box_productfull .inbank-container').remove();
								
								if( $('body.shop_product #box_productfull').find('.form-basket').length > 0){
									$('body.shop_product #box_productfull').find('.form-basket').before(''+value.product_template+'
'); 
								} 
							}
						}
						console.log( value);
					});
					//console.log(rdata);
				 }
			});    
		}
		else{
			root.printInfo('no product id');
		}
	};
	
    var setEvents = function(){      		
		
		/*
		console.log('setEvents');
		$("body.shop_product").on('DOMSubtreeModified', 'input[name="stock_id"]', function(event) {
			alert('aaaaaaaaa');
		});
	*/
	
		var stockid = null;
		
		if($("body.shop_product").length != 'undefined' && $('body.shop_product input[name="stock_id"]').length != 'undefined'){
			
			$(".form-basket").on("input", function() {
				//console.log((this));
				
				let product_id = $('body').attr('id');
			
				if(product_id != 'undefined'){
					isInitPart = true;
					product_id = product_id.replace( /^\D+/g, '');	
					setTimeout(function(){ getCalculations(product_id);}, 1000);	
					
				}
			});
		}
		
    };
      
    this.construct(app);
    setEvents();
 
};
$(function() {
					var appInBank = new ShoperInBankClass('aHR0cHM6Ly9zaG9wZXIuaW5iYW5rLmRldi8=');
					appInBank.loadOptions({cdebug : true,appName: 'InBank',shopid:428,shoplngid:1});
					$.when(				
						appInBank.loadShopConfig()
					).then(function(resultConfig) {                     
												
						if(resultConfig.status == 'ok'){
						   appInBank.printInfo('Config loaded');
						   let rdata = resultConfig.data;
						   appInBank.loadOptions(rdata);
						   appInBank.init(
							function() {
								
							}
						   );
						}
						else{
							appInBank.printDebug(resultConfig);
							appInBank.printInfo('Error loading config - global');
						}
					 });
				});