(function () {

  var productAmount = undefined;

  var onProductEvent = function (event) {

    var product = event.detail.product.toJS();
    var cart = event.detail.cart.toJS();

    if (!product.price) {
      return;
    }

    var pageViewType = "product";
    var amount = product.price.amount;
    this.productAmount = amount;

    if (cart.grandTotal) {
      amount += cart.grandTotal.amount;
    }

    var bannerContainerId = getBannerContainerId(pageViewType);

    setBannerContainerInfo(bannerContainerId, pageViewType, amount);
    showRatenkaufBanner(bannerContainerId, pageViewType, amount);
  };

  var onCartAddEvent = function (event) {
    var cart = event.detail.cart;

    if (!cart.grandTotal) {
      return;
    }

    var pageViewType = "product";
    var amount = cart.grandTotal.amount + this.productAmount;
    var bannerContainerId = getBannerContainerId(pageViewType);

    updateBannerContainerAmount(bannerContainerId, amount);
  };

  var onCheckoutEvent = function (event) {

    var cart = event.detail.cart;
    var pageViewType = "cart";

    if (!cart.grandTotal || cart.grandTotal.amount <= 0) {
      return;
    }

    var amount = cart.grandTotal.amount;
    var bannerContainerId = getBannerContainerId(pageViewType);

    setBannerContainerInfo(bannerContainerId, pageViewType, amount);
    showRatenkaufBanner(bannerContainerId, amount, pageViewType);
  };

  var showRatenkaufBanner = function (bannerContainerId, amount) {
    var RatenkaufBannerLibrary = undefined;

        
            
    RatenkaufBannerLibrary = "https://www.paypal.com/sdk/js?client-id=AWRtFLAEUL97pBLp7ZWrqAU8j2epec5FD0UTwiWst6ngmclOo-vfpu2xXNLeNFtbLXpR3NDVkMPl0GKm&merchant-id=HG25JFCDRNP7W&components=messages&currency=EUR";
            
        
            
        
            
        
            
        
            
        
            
        
            
        
            
        
            
        
            
        
            
        
            
        
            
        
            
        
            
        
            
        
            
        

    if (RatenkaufBannerLibrary === undefined) {
      return;
    }

    if (window.paypalRatenkaufLibrary !== undefined) {
      window.paypalRatenkaufLibrary.Messages({
        countryCode: getShopperLocale(),
      });
      return;
    }

    var paypalRatenkaufScriptElement = document.createElement('script');

    paypalRatenkaufScriptElement.setAttribute("data-namespace", "paypalRatenkaufLibrary");
    paypalRatenkaufScriptElement.src = RatenkaufBannerLibrary;
    document.body.appendChild(paypalRatenkaufScriptElement);

    paypalRatenkaufScriptElement.addEventListener(
      'load',
      function () {
        window.paypalRatenkaufLibrary = paypalRatenkaufLibrary;
        window.paypalRatenkaufLibrary.Messages({
          countryCode: getShopperLocale(),
        });
      },
      {
        once: true
      });
  };

  var getShopperLocale = function () {
    var countryCode = "DE";
    if (document.documentElement && document.documentElement.lang) {
      countryCode = document.documentElement.lang.toUpperCase();
    }
    return countryCode;
  };

  var getBannerContainerId = function (pageViewType) {
    var bannerContainerId = "ep-app-area-product-view-price";
    if (pageViewType === "cart") {
      bannerContainerId = "ep-app-area-cart-view-cart-totals";
    }
    return bannerContainerId;
  };

  var setBannerContainerInfo = function (bannerContainerId, pageViewType, amount) {
    var bannerContainer = document.getElementById(bannerContainerId);

    bannerContainer.setAttribute("data-pp-message", "");
    bannerContainer.setAttribute("data-pp-placement", pageViewType);
    bannerContainer.setAttribute("data-pp-amount", amount);

    return bannerContainerId;
  };

  var updateBannerContainerAmount = function (bannerContainerId, amount) {
    var bannerContainer = document.getElementById(bannerContainerId);
    bannerContainer.setAttribute("data-pp-amount", amount);
    return amount;
  };

  return function () {
    if (window.eComEventTarget) {
      window.eComEventTarget.addEventListener('product', onProductEvent);
      window.eComEventTarget.addEventListener('cart:add', onCartAddEvent);
      window.eComEventTarget.addEventListener('cart', onCheckoutEvent);
    }
  }();
}());
