async function maybeShowButton(){let e=document.getElementById("googlepay-container");if(""===yith_ppwc_google_pay.context||!e)return;const t=await paypal.Googlepay().config(),{isEligible:o,countryCode:n,merchantInfo:a,allowedPaymentMethods:r}=t;if(!o)throw new Error("googlepay is not eligible");new GooglePayButton(t).init()}window.addEventListener("load",(()=>{(async()=>{maybeShowButton()})()}));class GooglePayButton{constructor(e){this.config=e,this.paymentsClient=null,this.shippingCountries=yith_ppwc_google_pay.countries,this.context=yith_ppwc_google_pay.context,this.environment=yith_ppwc_google_pay.environment,this.buttonColor=yith_ppwc_google_pay.buttonColor,this.buttonType=yith_ppwc_google_pay.buttonType,this.buttonSizeMode=yith_ppwc_google_pay.buttonSizeMode,this.buttonLocale=yith_ppwc_google_pay.buttonLocale,this.form="",this.fundingSource=yith_ppwc_google_pay.fundingSource,this.formRequestType="",this.baseRequest={apiVersion:2,apiVersionMinor:0}}initEvents(){jQuery(document.body).on("updated_cart_totals updated_checkout update_shipping_method",(function(){maybeShowButton()})),jQuery("form.variations_form").on("show_variation",(function(e,t,o){let n=jQuery(".yith-ppwc-button-container").find("#googlepay-container");o?n.show():n.hide()})),jQuery("form.variations_form").on("hide_variation",(function(e,t,o){jQuery(".yith-ppwc-button-container").find("#googlepay-container").hide()}))}init(){this.paymentsClient=this.getGooglePaymentsClient(),this.paymentsClient.isReadyToPay(this.getGoogleIsReadyToPayRequest(this.config.allowedPaymentMethods,this.config)).then((e=>{e.result&&(this.renderButton(),this.initEvents())})).catch((e=>{console.error("yith_ppwc_google_pay init",e)}))}getGooglePaymentsClient(){if(null===this.paymentsClient){const e={onPaymentAuthorized:this.onPaymentAuthorized.bind(this),onPaymentDataChanged:this.onPaymentDataChanged.bind(this)};this.paymentsClient=new google.payments.api.PaymentsClient({environment:"sandbox"===this.environment?"TEST":"PRODUCTION",paymentDataCallbacks:e})}return this.paymentsClient}getGoogleIsReadyToPayRequest(e,t){return Object.assign({},t,{allowedPaymentMethods:e})}renderButton(){const e=this.paymentsClient.createButton({onClick:this.onGooglePaymentButtonClicked.bind(this),allowedPaymentMethods:this.config.allowedPaymentMethods,buttonColor:this.buttonColor,buttonType:this.buttonType,buttonSizeMode:this.buttonSizeMode,buttonLocale:"browser"===this.buttonLocale?"":this.buttonLocale});let t=document.getElementById("googlepay-container");t.innerHTML="",t.appendChild(e)}async onGooglePaymentButtonClicked(){var e="";if("cart"!==this.context&&"checkout"!==this.context||(e={validate:!0}),"product"===this.context){let t=document.getElementById("googlepay-container");this.form=jQuery(t).closest(".product.type-product").find("form.cart"),this.form.length&&(e=await this.validate_cart())}if(e?.validate){const e=await this.getGooglePaymentDataRequest();this.paymentsClient.loadPaymentData(e).then((e=>{})).catch((e=>{"CANCELED"===e?.statusCode&&"product"===this.context&&this.maybe_clean_session()}))}}async maybe_clean_session(){var e=[];e.push({name:"request",value:"maybe_clean_session"}),this.blockFormRequest();await fetch(yith_ppwc_frontend.ajaxUrl,{method:"POST",headers:{"content-type":"application/x-www-form-urlencoded"},credentials:"same-origin",body:this.formatRequestBody(e,"googlepay")});this.unblockFormRequest()}validate_cart(){return new Promise((async(e,t)=>{try{var o=[];if(this.form){if((o=this.form.serializeArray()).push({name:"request",value:"validate_product_cart"}),"product"===this.context){o.push({name:"is-yith-ppwc-action",value:"yes"});let e=this.form.find('button[name="add-to-cart"]');e.length&&o.push({name:"add-to-cart",value:e.val()})}this.blockFormRequest();const t=await fetch(yith_ppwc_frontend.ajaxUrl,{method:"POST",headers:{"content-type":"application/x-www-form-urlencoded"},credentials:"same-origin",body:this.formatRequestBody(o,this.context)}),n=await t.json();return n&&"failure"===n.result?(this.handleRequestError(n,"cart"),e({validate:!1})):(this.unblockFormRequest(),e({validate:!0}))}return e({validate:!1})}catch(e){console.log("yith_ppwc_google_pay validate_cart",e),t()}}))}async getGooglePaymentDataRequest(){const e=Object.assign({},this.baseRequest);return e.allowedPaymentMethods=this.config.allowedPaymentMethods,e.transactionInfo=await this.getGoogleTransactionInfo(),e.merchantInfo=this.config.merchantInfo,e.callbackIntents=["SHIPPING_ADDRESS","SHIPPING_OPTION","PAYMENT_AUTHORIZATION"],e.shippingAddressRequired=!0,e.shippingAddressParameters=this.shippingAddressParameters(),e.shippingOptionRequired=!0,e.emailRequired=!0,this.logger("paymentDataRequest",e),e}shippingAddressParameters(){return{allowedCountryCodes:this.shippingCountries,phoneNumberRequired:!0}}onPaymentDataChanged(e){return this.logger("onPaymentDataChanged",e),new Promise((async(t,o)=>{let n={};const a=await this.updatePaymentData(e);this.logger("onPaymentDataChanged:updatedData",a);const r=await this.getGoogleTransactionInfo();if(a.country_code=r.countryCode,a.currency_code=r.currencyCode,a.total_str=r.totalPrice,!a.shipping_options||!a.shipping_options.shippingOptions.length)return n.error=this.unserviceableShippingAddressError(),void t(n);switch(e.callbackTrigger){case"INITIALIZE":case"SHIPPING_ADDRESS":n.newShippingOptionParameters=a.shipping_options,n.newTransactionInfo=this.calculateNewTransactionInfo(a);break;case"SHIPPING_OPTION":n.newTransactionInfo=this.calculateNewTransactionInfo(a)}t(n)}))}unserviceableShippingAddressError(){return{reason:"SHIPPING_ADDRESS_UNSERVICEABLE",message:"Cannot ship to the selected address",intent:"SHIPPING_ADDRESS"}}calculateNewTransactionInfo(e){return{countryCode:e.country_code,currencyCode:e.currency_code,totalPriceStatus:"FINAL",totalPrice:e.total_str}}updatePaymentData(e){return this.logger("updatePaymentData"),new Promise(((t,o)=>{try{var n=[];n.push({name:"request",value:"update_payment_data"}),n.push({name:"paymentData",value:JSON.stringify(e)}),this.logger("updatePaymentData fetch"),fetch(yith_ppwc_frontend.ajaxUrl,{method:"POST",headers:{"content-type":"application/x-www-form-urlencoded"},credentials:"same-origin",body:this.formatRequestBody(n,"googlepay")}).then((e=>e.json())).then((e=>{e.success&&t(e.data)}))}catch(e){console.error("yith_ppwc_google_pay updatePaymentData",e),o()}}))}getGoogleTransactionInfo(){return new Promise((async(e,t)=>{try{var o=[];o.push({name:"request",value:"cart_info"}),await fetch(yith_ppwc_frontend.ajaxUrl,{method:"POST",headers:{"content-type":"application/x-www-form-urlencoded"},credentials:"same-origin",body:this.formatRequestBody(o,this.context)}).then((e=>e.json())).then((t=>{if(t.success)return e({countryCode:t.data.countryCode,currencyCode:t.data.currencyCode,totalPriceStatus:"FINAL",totalPrice:t.data.totalPrice,totalPriceLabel:t.data.totalPriceLabel})}))}catch(e){console.error("yith_ppwc_google_pay getGoogleTransactionInfo",e),t()}}))}onPaymentAuthorized(e){return this.logger("payment authorized",e),this.blockFormRequest(),this.processPayment(e)}async processPayment(e){return new Promise((async(t,o)=>{this.logger("ProcessPayment",e);try{let o=await this.createOrder(this,e);this.logger("Order created "+o);const n=await paypal.Googlepay().confirmOrder({orderId:o,paymentMethodData:e.paymentMethodData});if(this.logger("processPayment: confirmOrder",n),"APPROVED"===n.status){let e=!1;await this.approveOrder(this,{orderID:o},{restart:()=>new Promise(((t,o)=>{e=!0,t()})),order:{get:()=>new Promise(((e,t)=>{e(null)}))}}),t(e?this.processPaymentResponse("ERROR","PAYMENT_AUTHORIZATION","FAILED TO APPROVE"):this.processPaymentResponse("SUCCESS"))}else t(this.processPaymentResponse("ERROR","PAYMENT_AUTHORIZATION","TRANSACTION FAILED"))}catch(e){t(this.processPaymentResponse("ERROR","PAYMENT_AUTHORIZATION",e.message))}}))}async createOrder(e,t,o,n){return this.logger("creating order"),fetch(yith_ppwc_frontend.ajaxUrl,{method:"POST",headers:{"content-type":"application/x-www-form-urlencoded"},body:this.formatRequestBody([{name:"request",value:"create_order"},{name:"checkoutRequest",value:this.context},{name:"orderID",value:yith_ppwc_google_pay.orderId},{name:"fundingSource",value:e.fundingSource},{name:"email",value:t.email},{name:"shippingFields",value:JSON.stringify(t.shippingAddress)}],"googlepay")}).then((function(e){return e.json()})).then((function(e){return e.id}))}async approveOrder(e,t,o){this.logger("approving order"),t&&t.orderID&&fetch(yith_ppwc_frontend.ajaxUrl,{method:"POST",headers:{"content-type":"application/x-www-form-urlencoded"},body:this.formatRequestBody([{name:"request",value:"approve_order"},{name:"orderID",value:t.orderID},{name:"checkoutRequest",value:this.context},{name:"fundingSource",value:e.fundingSource}],"googlepay")}).then((function(e){return e.json()})).then((function(e){e&&(e.result&&"failure"===e.result&&window.location.reload(),e.redirect&&(window.location.href=e.redirect))}))}processPaymentResponse(e,t=null,o=null){let n={transactionState:e};return(t||o)&&(n.error={intent:t,message:o}),this.logger("processPaymentResponse",n,this.context),n}formatRequestBody(e,t){var o=[];return e.push({name:"security",value:yith_ppwc_frontend.ajaxNonce}),""!==t&&e.push({name:"flow",value:t}),e.push({name:"funding",value:this.fundingSource}),jQuery.each(e,(function(e,t){o.push(t.name+"="+t.value)})),o.join("&")}handleRequestError(e,t){if(e&&e.reload)window.location.reload();else if(e&&e.redirect)window.location.href=e.redirect;else{var o=e&&e.messages.length?e.messages:yith_ppwc_frontend.errorMessage;"checkout"===t?(jQuery(".woocommerce-NoticeGroup-checkout, .woocommerce-error, .woocommerce-message").remove(),jQuery("form.checkout").prepend('<div class="woocommerce-NoticeGroup woocommerce-NoticeGroup-checkout">'+o+"</div>"),jQuery(document.body).trigger("checkout_error",[o]),this.form.find(".input-text, select, input:checkbox").trigger("validate").blur()):jQuery(".woocommerce-notices-wrapper").first().html(o),void 0!==jQuery.scroll_to_notices&&jQuery.scroll_to_notices("checkout"===t?jQuery(".woocommerce-NoticeGroup-checkout"):jQuery(".woocommerce-notices-wrapper").first()),this.unblockFormRequest()}return!1}blockFormRequest(){let e=[];switch(this.context){case"cart":e.push(jQuery(".woocommerce-cart .cart_totals")),e.push(jQuery(".woocommerce-cart .woocommerce-cart-form"));break;case"checkout":e.push(jQuery("form.woocommerce-checkout"));break;case"product":e.push(jQuery("form.cart"))}e.push(jQuery(".yith-ppwc-button-container")),e.forEach((e=>{e.addClass("processing").block({message:null,overlayCSS:{background:"#fff",opacity:.6}})}))}unblockFormRequest(){let e=[];switch(this.context){case"cart":e.push(jQuery(".woocommerce-cart .cart_totals")),e.push(jQuery(".woocommerce-cart .woocommerce-cart-form"));break;case"checkout":e.push(jQuery("form.woocommerce-checkout"));break;case"product":e.push(jQuery("form.cart"))}e.push(jQuery(".yith-ppwc-button-container")),e.forEach((e=>{e.removeClass("processing").unblock()}))}logger(...e){"sandbox"===this.environment&&console.log("yith_ppwc_google_pay",e)}};