import{E as y}from"./ApiRoutes-y4lQpV_n.js";import{C as c,L as w,z as p}from"./CookieHelper-DbqU7ipl.js";import{F as T,a as B,E as x,A as L,S,b}from"./SessionStorageHelper-D_BNHqIx.js";import{T as h}from"./TrackingHelper-B5Iqqkox.js";import{D as N}from"./DomEventHelper-g1lmsfws.js";import{Z as E}from"./EventsHelper-CnJnWn_e.js";import{T as tt,u as et}from"./zapi.composable-TeUe2qQ_.js";import{A as rt}from"./AddressHelper-Wxbww-RY.js";import{P as at}from"./ProductHelper-BXiy8uXw.js";import{C as k}from"./CartHelper-B1FH7y7G.js";class ot{static setCheckoutInfoToGtm(o,I){dataLayer.push({ecommerce:{checkout:{actionField:{step:o},products:I}},event:"checkout"})}static setPurchaseInfoToGtm(o,I,A,C,l){dataLayer.push({ecommerce:{currencyCode:c.getCurrency(),purchase:{actionField:{afiliation:"RINGANA COM Store",id:o,revenue:I,shipping:C,tax:A},products:l}},event:"COM-purchase"})}static setProductInfoOnAddToCartToGtm(o){dataLayer.push({ecommerce:{add:{products:o},currencyCode:c.getCurrency()},event:"addToCart"})}}const ft=()=>{const u=et();let o=null,I=!1;const A=async e=>{var n;o=e;let t=0;o.shoppingCarts=o.shoppingCarts.map(s=>(s.cartTypeId!==p.ECartTypeId.PARTNER_APPLICATION&&(t+=s.itemsCount),{...s,items:s.items.sort((a,i)=>(a.title??"").localeCompare(i.title??""))})),c.setLastUsedCartId(o.shoppingCarts[0].cartId);const r=(n=e.shoppingCarts.find(s=>s.cartTypeId===p.ECartTypeId.PERSONAL_USE))==null?void 0:n.cartId;r?c.setPersonalUseCartId(r):c.removePersonalUseCartId(),w.setCart(o),k.updateCartCount(t)},C=async()=>{var e;try{const t=await u.postCartCreate();c.setLastUsedCartId(t.cartId);const r=(e=t.shoppingCarts.find(n=>n.cartTypeId===p.ECartTypeId.PERSONAL_USE))==null?void 0:e.cartId;r&&c.setPersonalUseCartId(r),c.setCartSession(t.session),w.setCart(t),await l()}catch(t){if(t instanceof T&&t.errorCode===y.LIMITING_BOUNCER_ACTIVE)B.setLimitingActive();else throw t}},l=async(e=[])=>{if(!c.getCartSession()&&!c.getAuthToken())return;let t;try{t=await u.getCart(e.toString())}catch(r){if(r instanceof T&&r.message==="session required")c.removeCartSession();else throw r}t?await A(t):await C()},U=async(e,t=!1)=>{const r=await u.getCoupons(+e,t);return tt.transformApiCouponsToCustomerCoupons(r)},P=async(e,t,r,n=!1,s)=>{const a=await u.removeItemFromCart(t,e,n,s);return s==="product"&&h.trackCartRemoveItem(r,a.sum.total),k.updateLocalCart(a.shoppingCarts[0]),a},O=async(e,t,r=!1)=>(await E.redeemCoupon.fetch({data:{cartId:e,code:t,isPartnerApplication:r}})).data,H=e=>{if(o)for(const t of o.shoppingCarts)t.cartTypeId===p.ECartTypeId.PERSONAL_USE&&(t.taxNumber=e)},F=async(e,t,r,n=p.ECartTypeId.PERSONAL_USE)=>{let s=r;if(!c.getCartSession()&&!c.getAuthToken()&&(await C(),s=c.getLastUsedCartId()),!s||+s<=0)s=c.getLastUsedCartId();else switch(n){case p.ECartTypeId.PERSONAL_USE:case p.ECartTypeId.CUSTOMER:c.setLastUsedCartId(s);break;case p.ECartTypeId.PARTNER_APPLICATION:break;default:console.warn(`cartTypeId '${n}' unknown!`)}try{const a=(await E.postItemToCart.fetch({data:{amount:e.amount??1,cartId:r,couponAmount:e.couponAmount,couponCurrency:e.couponCurrency,couponEmailFrom:e.couponEmailFrom,couponEmailTo:e.couponEmailTo,couponFrom:e.couponFrom,couponId:e.couponId,couponMedium:e.couponMedium,couponTo:e.couponTo,customText1:e.customText1,customText2:e.customText2,isPartnerApplication:e.isPartnerApplication??!1,matchcode:e.matchcode,matchcodeBlocked:e.matchcodeBlocked,setSwap:e.setSwap??!1}})).data,i=a.shoppingCarts.find(m=>m.cartId===s),d=i==null?void 0:i.items.find(m=>m.matchcode.toUpperCase()===e.matchcode.toUpperCase());d&&e.amount&&h.trackCartAddItem(d.matchcode,d.title??"","",parseFloat(d.price.normal.toFixed(2)),e.amount,a.sum.total?parseFloat(a.sum.total.toFixed(2)):0),k.updateLocalCart(a.shoppingCarts[0]);const f=document.querySelector(".cartIcon");if(f&&(f.classList.add("shake is-animating"),setTimeout(()=>f.classList.remove("shake is-animating"),200)),I=!1,c.getAuthToken()){const m=a.shoppingCarts[0];let g=null;if(m)try{const v=await U(m.cn,!0);for(const _ of m.items){const M=v.find(Y=>Y.matchcode===_.matchcode);M&&(g={coupon:M,item:_,updatedCart:m})}}catch(v){x.handleError(v,{logToConsole:!0})}g&&g.updatedCart.cartId&&(await P(g.updatedCart.cartId,g.item.cartContentId,e.matchcode,!1,"coupon"),await O(g.updatedCart.cartId,g.coupon.code),N.fireEvent({name:"rin-add-autoredeemed-coupon"}))}return a}catch(a){if(a instanceof Error)if(/^Dieser Artikel kann maximal /ig.test(a.message)){const d=/^Dieser Artikel kann maximal ([0-9]*)-/ig.exec(a.message)??["",""];throw new L(t("errors:maxUnitsPerCart",{maxAmount:d[1]}))}else{if(a instanceof T&&a.errorCode===y.LIMITING_BOUNCER_ACTIVE)throw N.fireEvent({name:"rin-limiting-shopping-disallowed"}),N.fireEvent({detail:{...e,cartId:s},name:"rin-limiting-add2cart-retry"}),a;switch(x.handleError(a,{logToConsole:!0}),a.message){case"<idwarenkorb> invalid":c.removeCartId(),c.removeCartSession(),c.removeCartIdsForCheckout(),I?(await S.fire("",t("errors:cannotBeAddedTemporary"),"error"),window.location.reload()):(I=!0,await C(),await F(e,t,r));break;case"product cannot be bought":await S.fire("",t("errors:cannotBeBoughtTemporary"),"error");break;default:a.errorCode===11018?await S.fire("",a.message,"error"):await S.fire("",t("errors:unknown"),"error")}throw a}else throw await S.fire("",t("errors:unknown"),"error"),new L(t("errors:unknown"))}},D=async(e,t,r=!1,n,s)=>{const a={amount:n??1,matchcode:e.matchcode};a.cartId=s??c.getLastUsedCartId();const i=await F(a,t,a.cartId),d={id:e.matchcode,name:e.title,price:at.getPriceUnformatted(r,e.priceInformation),quantity:n??1};ot.setProductInfoOnAddToCartToGtm(d);const f=i.shoppingCarts.find(m=>m.cartId===s);return f?f.items.find(m=>m.cartContentId===i.cartContentId)??null:null},G=async(e,t,r=!1)=>(await E.addSupplement.fetch({data:{cartId:e,isPartnerApplication:r,supplementId:t}})).data,W=async e=>{try{const t=await u.postCartCreate(p.ECartTypeId.PERSONAL_USE,e?+e:void 0);return c.setLastUsedCartId(t.cartId),c.setCartSession(t.session),await A(t),t}catch(t){throw t instanceof T&&t.errorCode===y.INFOWORX_RESPONSE_EMAIL_MISSING?new Error("cart:emailMissing"):t instanceof T&&t.errorCode===y.LIMITING_BOUNCER_ACTIVE?(B.setLimitingActive(),t):new Error("cart:customerCartNotCreated")}},q=async(e,t)=>{if(await u.deleteCart(e))t===p.ECartTypeId.PERSONAL_USE&&await C(),c.removeCartId(),await l();else throw new Error},V=async(e,t)=>{try{const r=w.getPartnerShopInformation(),n=await u.getCheckoutAddresses(e,r!=null&&r.customerNumber?r.customerNumber.toString():void 0),s=n;return s.addresses=[...t,...n.addresses.map(a=>rt.transformAddressToCustomerAddress(a))],w.setDeliveryAddresses(s),n}catch(r){throw r instanceof Error?(x.handleError(r,{logToConsole:!0}),new Error(r.message)):r}},R=async()=>o||(o=w.getCart(),o||await l(),o||(c.removeCart(),await C()),o),Z=async()=>{if(await R(),!o)try{(await E.getBouncerConfig.fetch()).data.active&&(o=k.getEmptyCart())}catch(e){return x.handleError(e,{logToConsole:!0}),[]}return(o==null?void 0:o.shoppingCarts)??[]},z=async e=>(await l(e),(o==null?void 0:o.shoppingCarts)??[]),X=async()=>(await R(),((o==null?void 0:o.shoppingCarts)??[]).length>1),$=e=>{if(!e||!o)return;const t=e.shoppingCarts[0],r=o.shoppingCarts.findIndex(n=>n.cartId===t.cartId);if(r!==-1){o.shoppingCarts.splice(r,1,t);return}o=e},Q=async(e,t,r)=>{const n=await u.addItemToCart({matchcode:e,setSwap:!0},r),s=n.shoppingCarts.find(d=>d.cartId===r),a=s==null?void 0:s.items.find(d=>d.matchcode===t),i=s==null?void 0:s.items.find(d=>d.matchcode===e);return h.trackCartRemoveItem(e,n.sum.total),h.trackCartRemoveItem(t,n.sum.total),a&&h.trackCartAddItem(a.matchcode,a.title??"","",parseFloat(a.price.normal.toFixed(2)),a.amount,n.sum.total?parseFloat(n.sum.total.toFixed(2)):0),i&&h.trackCartAddItem(i.matchcode,i.title??"","",parseFloat(i.price.normal.toFixed(2)),i.amount,n.sum.total?parseFloat(n.sum.total.toFixed(2)):0),n},j=async(e,t,r,n=!1)=>(await E.removeCoupon.fetch({data:{cartContentId:t,cartId:e,code:r,isPartnerApplication:n}})).data,J=async e=>(await E.patchCartItem.fetch({data:e})).data,K=async(e,t,r,n=!1,s="product")=>{if(t.amount<1)return P(e,t.cartContentId,t.matchcode,n,s);let a;try{a=(await E.patchCartItem.fetch({data:{amount:t.amount,cartContentId:t.cartContentId,matchcode:t.matchcode}})).data,s==="product"&&(h.trackCartRemoveItem(t.matchcode,a.sum.total),h.trackCartAddItem(t.matchcode,t.title??"","",parseFloat(t.price.normal.toFixed(2)),t.amount,a.sum.total?parseFloat(a.sum.total.toFixed(2)):0)),k.updateLocalCart(a.shoppingCarts[0])}catch(i){if(i instanceof T)if(/^Dieser Artikel kann maximal /ig.test(i.message)){const f=/^Dieser Artikel kann maximal ([0-9]*)-/ig.exec(i.message);throw new L(r("errors:maxUnitsPerCart",{maxAmount:f[1]}))}else throw new L(r(`errors:${b.INFOWORX_RESPONSE_UPDATE_CART_ITEM}`));else throw i}return a};return w.isCartToBeReloaded()&&(w.removeCartToBeReloaded(),setTimeout(()=>l(),500)),{addItemToCart:F,addItemToCartWithProductInfo:D,addSupplement:G,createCustomerCart:W,createNewCart:C,deleteCustomerCart:q,fetchCart:l,fetchCoupons:U,fetchDeliveryAddresses:V,getCarts:Z,getCartsForCheckout:z,hasMultipleCarts:X,loadOrFetchCart:R,mergeModifiedCartIntoExistingCarts:$,placeSetInCart:Q,redeemCoupon:O,removeCoupon:j,removeItemFromCart:P,setCart:A,setTaxNumberForOwnCart:H,updateItem:J,updateQuantity:K}};export{ot as D,ft as u};
