import {calculateIT,calculateWeb,euro,bounded} from './pricing-engine.mjs';
const escape=s=>String(s).replace(/[&<>"']/g,c=>({'&':'&','<':'<','>':'>','"':'"',"'":'''}[c]));
const cfg=window.pds4Config;const p=cfg?.pricing;
const kinds={website:'Unternehmenswebsite',bundle:'Website + Reservierung',reservation:'Nur Reservierungssystem',shop:'Online-Shop',redesign:'Website überarbeiten'};
const option=(v,label,current)=>``;
const field=(label,key,value,min,max,step=1)=>``;
const warn='Lizenzen, Hardware, Fahrt- und Fremdkosten werden nach Bedarf separat vereinbart und sind derzeit nicht beziffert.';
function actions(summary,kind,selection){return `
${escape(v.label)}${v.price===null?'Auf Anfrage':'ab '+euro(v.price)} je ${escape({device:'Gerät',user:'Benutzer',case:'Standardfall',company:'Unternehmen'}[v.unit])}
`}).join('')}
Zusätzlicher Support
${field('Geschätzte Stunden für zusätzliche Arbeiten','hours',s.hours,0,100,0.25)}
Keine doppelte Verrechnung. Stunden nur für weitere Arbeiten außerhalb ausgewählter Leistungen. Viertelstunden sind Eingabeschritte, keine vertragliche Abrechnungstaktung.
`;
const monthly=`${field('Anzahl Ihrer Geräte','devices',s.devices,1,999)}${s.devicesDie Mindestpauschale entspricht ${p.minDevices} Geräten.`:''}
${p.packages[s.package].minutes} Minuten Fernwartung je Gerät. ${s.package==='basic'?'E-Mail-Support und Gerätecheck.':s.package==='business'?'Zusätzlich Microsoft-365-Basisverwaltung und Basis-Sicherheitsprüfung.':'Zusätzlich Microsoft-365-Basisverwaltung, Basis-Sicherheitsprüfung, Intune für geeignete Geräte und priorisierte Bearbeitung im vereinbarten Servicefenster.'} Umfang und Reaktionszeiten vor Vertragsabschluss festlegen. Kein unbegrenzter Support, keine Übertragung ungenutzter Minuten, keine Lizenzen inklusive.
`;
root.innerHTML=tabs+`
${s.mode==='once'?once:monthly}
`;
}
availability();
}
root.addEventListener('click',async e=>{const a=e.target.closest('a');if(a?.getAttribute('aria-disabled')==='true'){e.preventDefault();return;}if(a?.dataset.pds5Offer){try{sessionStorage.setItem('pds5-offer',a.dataset.pds5Offer);}catch{}}const b=e.target.closest('button');if(!b)return;const s=state.it;if(b.dataset.tab){state.tab=b.dataset.tab;history.replaceState(null,'','#'+(state.tab==='it'?'it-kalkulator':'web-kalkulator'));render();}else if(b.dataset.mode){s.mode=b.dataset.mode;render();}else if(b.hasAttribute('data-add')){const id=root.querySelector('[data-picker]').value;if(!s.rows.some(v=>v.id===id)){s.rows.push({id,qty:1});render();}else root.querySelector('.copy-status').textContent='Diese Leistung ist bereits enthalten.';}else if(b.dataset.remove){s.rows=s.rows.filter(v=>v.id!==b.dataset.remove);render();}else if(b.hasAttribute('data-copy')){try{await navigator.clipboard.writeText(summary);root.querySelector('.copy-status').textContent='Kalkulation kopiert.';}catch{const ta=root.querySelector('.copy-fallback');ta.hidden=false;ta.focus();ta.select();root.querySelector('.copy-status').textContent='Bitte mit Strg+C oder ⌘C kopieren.';}}});
root.addEventListener('change',e=>{const el=e.target;if(el.type==='number'&&!el.validity.valid){availability();return;}const s=state.tab==='web'?state.web:state.it;if(el.dataset.row){s.rows=s.rows.map(v=>v.id===el.dataset.row?{...v,qty:bounded(el.value,1,999)}:v);render();}else if(el.dataset.key){const key=el.dataset.key;s[key]=el.type==='number'?bounded(el.value,Number(el.min),Number(el.max),Number(el.step)):el.value;render();}});
function availability(){
const invalid=[...root.querySelectorAll('input[type=number]')].some(el=>!el.validity.valid);
const empty=state.tab==='it'&&state.it.mode==='once'&&state.it.rows.length===0&&state.it.hours===0;
const disabled=invalid||empty;
root.querySelectorAll('.calc-actions a').forEach(a=>{if(!a.dataset.pds5Href)a.dataset.pds5Href=a.getAttribute('href')||'';a.setAttribute('aria-disabled',String(disabled));if(disabled)a.removeAttribute('href');else a.href=a.dataset.pds5Href;});
root.querySelectorAll('[data-copy]').forEach(b=>b.disabled=disabled);
let note=root.querySelector('.pds5-validation');if(!note){note=document.createElement('p');note.className='pds5-validation';note.setAttribute('role','status');root.querySelector('.config-summary').append(note);}
note.textContent=invalid?'Bitte eine gültige Menge innerhalb der angezeigten Grenzen eingeben.':empty?'Wählen Sie eine IT-Leistung oder zusätzliche Supportstunden aus.':'';
}
root.addEventListener('input',e=>{if(e.target.type==='number'){e.target.setAttribute('aria-invalid',String(!e.target.validity.valid));availability();}});
function hash(){if(type==='both'&&['#web-kalkulator','#website-kalkulator','#webdesign-kalkulator'].includes(location.hash))state.tab='web';else if(type==='both'&&location.hash==='#it-kalkulator')state.tab='it';render();availability();if(['#it-kalkulator','#web-kalkulator','#website-kalkulator','#webdesign-kalkulator','#konfigurator'].includes(location.hash)&&typeof root.scrollIntoView==='function')root.scrollIntoView({block:'start'});}window.addEventListener('hashchange',hash);hash();availability();
}
for(const form of document.querySelectorAll('.pds4-contact-form')){
if(form.dataset.pds5Ready)continue;form.dataset.pds5Ready='1';
try{const selected=sessionStorage.getItem('pds5-offer');if(selected){JSON.parse(selected);form.querySelector('[name=selection]').value=selected;const box=form.querySelector('.pds5-selection');box.hidden=false;box.textContent='Ihre Auswahl aus dem Kalkulator wird mit den aktuellen Preisen in der Anfrage mitgesendet.';}}catch{}
const summary=new URLSearchParams(location.search).get('summary');if(summary)form.querySelector('[name=message]').value=summary.slice(0,10000);
form.addEventListener('submit',async e=>{e.preventDefault();if(!form.reportValidity())return;const button=form.querySelector('[type=submit]'),status=form.querySelector('[role=status]');button.disabled=true;status.textContent='Anfrage wird gesendet …';try{const data=new FormData(form);const response=await fetch(cfg.ajax,{method:'POST',body:data,credentials:'same-origin'});const result=await response.json();status.textContent=result.data?.message||'Versand fehlgeschlagen.';if(result.success){form.reset();try{sessionStorage.removeItem('pds5-offer');}catch{}form.querySelector('.pds5-selection').hidden=true;}}catch{status.textContent='Versand nicht möglich. Bitte per E-Mail oder WhatsApp kontaktieren.';}finally{button.disabled=false;}});
}
}
boot();
new MutationObserver(boot).observe(document.body,{childList:true,subtree:true});