{
  "version": 3,
  "sources": ["/cdn/shop/t/112/assets/wishlist-sync.js?bv=3"],
  "sourcesContent": ["class WishlistSync {\n  constructor() {\n    this.config = Object.assign(\n      { customerId: null, isLoggedIn: false, proxyUrl: '/apps/wishlist', wishlistPageUrl: '/pages/wishlist' },\n      window.wishlistConfig || {}\n    );\n    // Chiave separata per cliente (o per ospite): evita che la wishlist di un\n    // account resti visibile dopo il logout/login con un account diverso\n    // sullo stesso browser.\n    this.storageKey = 'benitronica_wishlist_' + (this.config.customerId ? String(this.config.customerId) : 'guest');\n    this._syncTimer = null;\n    this._store = this._load();\n  }\n\n  _load() {\n    try {\n      const raw = localStorage.getItem(this.storageKey);\n      if (raw) {\n        const parsed = JSON.parse(raw);\n        if (Array.isArray(parsed.items)) {\n          parsed.items = parsed.items.map(item => ({\n            id: String(item.id),\n            handle: item.handle,\n            title: item.title || '',\n            variantId: item.variantId || null,\n            addedAt: item.addedAt || item.timestamp || Date.now()\n          }));\n          if (!Array.isArray(parsed.removes)) parsed.removes = [];\n          return parsed;\n        }\n      }\n    } catch (e) {}\n    return { items: [], removes: [], updatedAt: 0 };\n  }\n\n  _persist() {\n    this._store.updatedAt = Date.now();\n    try {\n      localStorage.setItem(this.storageKey, JSON.stringify(this._store));\n    } catch (e) {}\n    this._emit();\n    this._scheduleSync();\n  }\n\n  _emit() {\n    document.dispatchEvent(new CustomEvent('wishlist:changed', {\n      detail: { items: this._store.items, count: this._store.items.length }\n    }));\n  }\n\n  add(product) {\n    if (this.has(product.id)) return;\n    const id = String(product.id);\n    this._store.removes = this._store.removes.filter(r => String(r.id) !== id);\n    this._store.items.push({\n      id,\n      handle: product.handle,\n      title: product.title || '',\n      variantId: product.variantId || null,\n      addedAt: Date.now()\n    });\n    this._persist();\n  }\n\n  remove(productId) {\n    const id = String(productId);\n    this._store.items = this._store.items.filter(item => String(item.id) !== id);\n    const existing = this._store.removes.find(r => String(r.id) === id);\n    if (existing) {\n      existing.removedAt = Date.now();\n    } else {\n      this._store.removes.push({ id, removedAt: Date.now() });\n    }\n    this._persist();\n  }\n\n  toggle(product) {\n    if (this.has(product.id)) {\n      this.remove(product.id);\n      return false;\n    }\n    this.add(product);\n    return true;\n  }\n\n  has(productId) {\n    const id = String(productId);\n    return this._store.items.some(item => String(item.id) === id);\n  }\n\n  getAll() {\n    return this._store.items.slice();\n  }\n\n  clear() {\n    const now = Date.now();\n    this._store.items.forEach(item => {\n      const existing = this._store.removes.find(r => String(r.id) === String(item.id));\n      if (existing) { existing.removedAt = now; }\n      else { this._store.removes.push({ id: String(item.id), removedAt: now }); }\n    });\n    this._store.items = [];\n    this._persist();\n  }\n\n  _mergeStates(localState, serverState) {\n    const map = new Map();\n\n    const upsertItem = (item) => {\n      const id = String(item.id);\n      const cur = map.get(id) || { addedAt: 0, removedAt: 0, data: null };\n      const at = item.addedAt || item.timestamp || 0;\n      if (at > cur.addedAt) { cur.addedAt = at; cur.data = item; }\n      map.set(id, cur);\n    };\n\n    const upsertRemove = (r) => {\n      const id = String(r.id);\n      const cur = map.get(id) || { addedAt: 0, removedAt: 0, data: null };\n      if ((r.removedAt || 0) > cur.removedAt) cur.removedAt = r.removedAt || 0;\n      map.set(id, cur);\n    };\n\n    (localState.items || []).forEach(upsertItem);\n    (serverState.items || []).forEach(upsertItem);\n    (localState.removes || []).forEach(upsertRemove);\n    (serverState.removes || []).forEach(upsertRemove);\n\n    const TOMBSTONE_TTL = 90 * 24 * 60 * 60 * 1000;\n    const now = Date.now();\n    const items = [], removes = [];\n\n    for (const [id, s] of map) {\n      if (s.removedAt > 0 && s.removedAt >= s.addedAt) {\n        if (now - s.removedAt < TOMBSTONE_TTL) removes.push({ id, removedAt: s.removedAt });\n      } else if (s.addedAt > 0 && s.data) {\n        items.push({ id, handle: s.data.handle, title: s.data.title || '', variantId: s.data.variantId || null, addedAt: s.addedAt });\n      }\n    }\n\n    return { items, removes };\n  }\n\n  _scheduleSync() {\n    if (!this.config.isLoggedIn) return;\n    clearTimeout(this._syncTimer);\n    this._syncTimer = setTimeout(() => this._syncWithServer(), 500);\n  }\n\n  async _syncWithServer() {\n    if (!this.config.isLoggedIn) return;\n    try {\n      const url = this.config.proxyUrl + '?cid=' + encodeURIComponent(this.config.customerId || '');\n      const res = await fetch(url, {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n          Accept: 'application/json',\n          'X-Wishlist-Token': this.config.apiToken || ''\n        },\n        body: JSON.stringify({ items: this._store.items, removes: this._store.removes || [] })\n      });\n      if (!res.ok) return;\n      const merged = await res.json();\n      if (!Array.isArray(merged.items)) return;\n\n      const prevKey = this._store.items.map(i => i.handle).sort().join(',');\n      const newKey = merged.items.map(i => i.handle).sort().join(',');\n\n      // Preserve variantId from local storage \u2014 the server does not store it\n      const localVariantMap = new Map(\n        this._store.items.map(item => [String(item.id), item.variantId || null])\n      );\n      this._store.items = merged.items.map(item => ({\n        id: item.id,\n        handle: item.handle,\n        title: item.title || '',\n        variantId: item.variantId || localVariantMap.get(String(item.id)) || null,\n        addedAt: item.addedAt || item.timestamp || 0\n      }));\n      this._store.removes = merged.removes || [];\n      this._store.updatedAt = Date.now();\n      try { localStorage.setItem(this.storageKey, JSON.stringify(this._store)); } catch (e) {}\n\n      if (prevKey !== newKey) this._emit();\n      document.dispatchEvent(new CustomEvent('wishlist:synced'));\n    } catch (e) {\n      document.dispatchEvent(new CustomEvent('wishlist:error', { detail: e }));\n    }\n  }\n\n  async syncFromServer() {\n    return this._syncWithServer();\n  }\n\n  async syncToServer() {\n    return this._syncWithServer();\n  }\n\n  _applyButtonState(btn) {\n    const isActive = this.has(btn.dataset.productId);\n    const i18n = window.wishlistI18n || {};\n    btn.classList.toggle('is-active', isActive);\n    btn.setAttribute('aria-pressed', String(isActive));\n    btn.setAttribute('aria-label', isActive ? (i18n.remove || 'Remove from wishlist') : (i18n.add || 'Add to wishlist'));\n  }\n\n  bindButton(btn) {\n    if (btn._wishlistBound) return;\n    btn._wishlistBound = true;\n    this._applyButtonState(btn);\n\n    // Auto-detect selected variant when button is on a product page\n    const productId = btn.dataset.productId;\n    if (productId) {\n      const form = document.querySelector('form[id*=\"-' + productId + '\"]');\n      if (form) {\n        const variantInput = form.querySelector('[name=\"id\"]');\n        if (variantInput) {\n          if (variantInput.value) btn.dataset.variantId = variantInput.value;\n          variantInput.addEventListener('change', function () {\n            btn.dataset.variantId = variantInput.value;\n          });\n        }\n      }\n    }\n\n    btn.addEventListener('click', (e) => {\n      e.preventDefault();\n      e.stopPropagation();\n      const product = {\n        id: btn.dataset.productId,\n        handle: btn.dataset.productHandle,\n        title: btn.dataset.productTitle || '',\n        variantId: btn.dataset.variantId || null\n      };\n      const added = this.toggle(product);\n      this._applyButtonState(btn);\n      document.dispatchEvent(new CustomEvent('wishlist:toast', { detail: { added, product } }));\n    });\n  }\n\n  applyButtonStates() {\n    document.querySelectorAll('.wishlist-btn').forEach(btn => this._applyButtonState(btn));\n  }\n\n  init() {\n    const btns = document.querySelectorAll('.wishlist-btn');\n    btns.forEach(btn => this.bindButton(btn));\n\n    const observer = new MutationObserver(mutations => {\n      mutations.forEach(({ addedNodes }) => {\n        addedNodes.forEach(node => {\n          if (node.nodeType !== 1) return;\n          if (node.matches && node.matches('.wishlist-btn')) this.bindButton(node);\n          node.querySelectorAll && node.querySelectorAll('.wishlist-btn').forEach(btn => this.bindButton(btn));\n        });\n      });\n    });\n    observer.observe(document.body, { childList: true, subtree: true });\n\n    this._updateNavCount();\n    document.addEventListener('wishlist:changed', () => this._updateNavCount());\n\n    this.syncFromServer();\n  }\n\n  _updateNavCount() {\n    const count = this._store.items.length;\n    document.querySelectorAll('.wishlist-nav-count').forEach(el => {\n      el.textContent = count;\n      el.classList.toggle('is-visible', count > 0);\n    });\n  }\n}\n\ndocument.addEventListener('DOMContentLoaded', () => {\n  window.BeniWishlist = new WishlistSync();\n  window.BeniWishlist.init();\n  document.dispatchEvent(new CustomEvent('wishlist:ready'));\n});\n"],
  "mappings": "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",
  "names": []
}
