(function(){function qs(e,s){return e.querySelector(s)}function qsa(e,s){return Array.from(e.querySelectorAll(s))}function setLoading(root,on){qsa(root,".wbwf-loading").forEach(x=>x.hidden=!on);qsa(root,"button").forEach(b=>b.disabled=on)}function showStep(root,step){qsa(root,".wbwf-step").forEach(s=>s.hidden=!0);const target=qs(root,".wbwf-step-"+step);if(target)target.hidden=!1}function clearErrors(root){const alert=qs(root,".wbwf-alert-error");if(alert){alert.hidden=!0;alert.textContent=""}qsa(root,".wbwf-field-error").forEach(e=>{e.hidden=!0;e.textContent=""})}function setFieldError(root,field,msg){const el=root.querySelector('.wbwf-field-error[data-for="'+field+'"]');if(el){el.hidden=!1;el.textContent=msg}}function getCfg(){if(typeof window.WBWIDERRUF_FORM!=="undefined"&&window.WBWIDERRUF_FORM)return window.WBWIDERRUF_FORM;if(typeof window.WBWF!=="undefined"&&window.WBWF)return window.WBWF;return null}async function apiPost(url,data){const res=await fetch(url,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(data)});const json=await res.json().catch(()=>null);return{status:res.status,json}}function messageFromResponse(r){if(r&&r.json&&r.json.message)return String(r.json.message);const cfg=getCfg();const map=(cfg&&cfg.i18n)?cfg.i18n:{};if(map&&map.server_error)return String(map.server_error);return"Es ist ein Fehler aufgetreten. Bitte versuchen Sie es später erneut."}document.addEventListener("DOMContentLoaded",function(){document.querySelectorAll(".wbwf").forEach(initForm)});function initForm(root){const form=qs(root,"form.wbwf-form");const alert=qs(root,".wbwf-alert-error");if(!form)return;let pending={id:null,token:null,summary:null};form.addEventListener("submit",async function(e){e.preventDefault();clearErrors(root);setLoading(root,!0);try{const cfg=getCfg();if(!cfg||!cfg.rest||!cfg.rest.pending){throw new Error("Form configuration missing")}
const fd=new FormData(form);const sel=qs(form,'select[name="reason_key"]');let reason_key=String(fd.get("reason_key")||"");let reason_label=String(fd.get("reason_label")||"");if(sel){reason_key=String(sel.value||reason_key);const opt=sel.options[sel.selectedIndex];reason_label=opt?String(opt.text||reason_label):reason_label;const hidden=qs(form,'input[name="reason_label"]');if(hidden)hidden.value=reason_label;}const data={customer_name:String(fd.get("customer_name")||""),customer_email:String(fd.get("customer_email")||""),contract_ref:String(fd.get("contract_ref")||""),reason_key:reason_key,reason_label:reason_label,reason:reason_label,remark:String(fd.get("remark")||""),hp_field:String(fd.get("hp_field")||"")};const r=await apiPost(cfg.rest.pending,data);if(!r.json||r.json.ok!==!0){if(alert){alert.hidden=!1;alert.textContent=messageFromResponse(r)}if(r.json&&r.json.fields){Object.keys(r.json.fields).forEach(field=>{const code=String(r.json.fields[field]||"");const map=(cfg&&cfg.i18n)?cfg.i18n:{};const msg=(code&&map&&map[code])?String(map[code]):(code?String(code):"");setFieldError(root,field,msg)})}return}pending.id=r.json.pending_id;pending.token=r.json.pending_token;pending.summary=r.json.summary||{};const sum=qs(root,".wbwf-summary");if(sum){sum.innerHTML=['<div class="wbwf-summary-box">','<div><strong>Name:</strong> '+escapeHtml(pending.summary.customer_name||"")+"</div>",'<div><strong>E-Mail:</strong> '+escapeHtml(pending.summary.customer_email||"")+"</div>",'<div><strong>Bestell-/Vertragsnummer:</strong> '+escapeHtml(pending.summary.contract_ref||"")+"</div>",pending.summary.remark?'<div><strong>Bemerkung:</strong> '+escapeHtml(pending.summary.remark)+"</div>":"",pending.summary.order_date?'<div><strong>Bestelldatum:</strong> '+escapeHtml(pending.summary.order_date)+"</div>":"","</div>"].join("")}
const cb=qs(root,'input[name="confirm_statement"]');if(cb)cb.checked=!1;showStep(root,"2")}catch(err){if(alert){alert.hidden=!1;alert.textContent=messageFromResponse(null)}}finally{setLoading(root,!1)}});root.addEventListener("click",function(e){const btn=e.target.closest("button[data-action]");if(!btn)return;const action=btn.getAttribute("data-action");if(action==="back"){clearErrors(root);showStep(root,"1");return}if(action==="confirm"){confirmStep(root,pending)}});async function confirmStep(root,pending){clearErrors(root);const cfg=getCfg();const errorEl=qs(root,".wbwf-alert-error");const cb=qs(root,'input[name="confirm_statement"]');if(!cb||!cb.checked){const map=(cfg&&cfg.i18n)?cfg.i18n:{};setFieldError(root,"confirm_statement",(map&&map.confirm_required)?String(map.confirm_required):"Bitte bestätigen Sie den Widerruf, um fortzufahren.");return}setLoading(root,!0);try{if(!cfg||!cfg.rest||!cfg.rest.confirm){throw new Error("Confirmation configuration missing")}
const r=await apiPost(cfg.rest.confirm,{pending_id:pending.id,pending_token:pending.token,confirm_statement:!0});if(!r.json||r.json.ok!==!0){if(errorEl){errorEl.hidden=!1;errorEl.textContent=messageFromResponse(r)}return}const meta=qs(root,".wbwf-success-meta");if(meta){meta.innerHTML=['<div class="wbwf-summary-box">','<div><strong>Referenz (Case ID):</strong> '+escapeHtml(String(r.json.case_ref||r.json.withdrawal_id||""))+"</div>",'<div><strong>Datum & Uhrzeit:</strong> '+escapeHtml(String(r.json.confirmed_at_local||r.json.confirmed_at||""))+"</div>","</div>"].join("")}
showStep(root,"success")}catch(err){if(errorEl){errorEl.hidden=!1;errorEl.textContent=messageFromResponse(null)}}finally{setLoading(root,!1)}}}function escapeHtml(str){return String(str).replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;").replaceAll("'","&#039;")}})();