(function (window){
"use strict";
var Core={};
Core.CACHE_TTL_MS=6 * 60 * 60 * 1000;
Core.MIN_LOADER_MS=0;
Core.wait=function (ms){
return new Promise(function (resolve){ setTimeout(resolve, ms); });
};
Core.postFormEncoded=function (data){
return fetch(ZoopBulkAjax.ajax_url, {
method: "POST",
credentials: "same-origin",
headers: { "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8" },
body: new URLSearchParams(data).toString()
}).then(function (r){ return r.json(); });
};
Core.postFormEncodedWithStatus=function (data, signal){
return fetch(ZoopBulkAjax.ajax_url, {
method: "POST",
credentials: "same-origin",
headers: { "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8" },
body: new URLSearchParams(data).toString(),
signal: signal
}).then(function (r){
return r.json().then(function (json){
return { status: r.status, ok: r.ok, json: json };}).catch(function (){
return { status: r.status, ok: r.ok, json: null };});
});
};
Core.refreshNonce=function (){
if(!ZoopBulkAjax||!ZoopBulkAjax.action_refresh_nonce) return Promise.resolve(false);
return Core.postFormEncoded({ action: ZoopBulkAjax.action_refresh_nonce })
.then(function (json){
if(json&&json.success&&json.data&&json.data.nonce){
ZoopBulkAjax.nonce=json.data.nonce;
return true;
}
return false;
})
.catch(function (){ return false; });
};
Core.fetchWithNonceRetry=function (payload, signal){
return Core.postFormEncodedWithStatus(payload, signal).then(function (res){
var securityFailed =
res.status===403 ||
(res.json&&res.json.success===false&&res.json.data&&res.json.data.message==="Security check failed");
if(!securityFailed) return res;
return Core.refreshNonce().then(function (ok){
if(!ok) return res;
payload.nonce=ZoopBulkAjax.nonce;
return Core.postFormEncodedWithStatus(payload, signal);
});
});
};
Core.buildQtyMap=function (form){
var map={};
var inputs=form.querySelectorAll(".zoop-qty-input[data-variation_id]");
for (var i=0; i < inputs.length; i++){
var vId=parseInt(inputs[i].dataset.variation_id||"0", 10);
var qty=parseInt(inputs[i].value||"0", 10);
if(vId > 0&&qty > 0&&!inputs[i].disabled) map[vId]=qty;
}
return map;
};
Core.cacheGet=function (cacheObj, key){
var item=cacheObj[key];
if(!item) return null;
if((Date.now() - item.ts) > Core.CACHE_TTL_MS){
delete cacheObj[key];
return null;
}
return item.html;
};
Core.cacheSet=function (cacheObj, key, html){
cacheObj[key]={ html: html, ts: Date.now() };};
window.ZoopBulkCore=Core;
})(window);