import {compute,money,summary,whatsapp} from './engine.mjs'; const esc=v=>String(v).replace(/[&<>"']/g,c=>({'&':'&','<':'<','>':'>','"':'"',"'":'''}[c])); const unit={device:'pro Gerät',user:'pro Benutzer',hour:'pro Stunde',once:'pauschal',monthly:'pro Monat',page:'pro Seite'}; document.querySelectorAll('[data-polat-calculator]').forEach(root=>{ if(root.dataset.initialized)return;root.dataset.initialized='true'; const cfg=JSON.parse(root.dataset.pricing),contact=JSON.parse(root.dataset.contact||'{}'),uid=root.id; const field=(id,label,body)=>``; const options=items=>items.map(x=>``).join(''); const num=(name,value,max,step='1')=>``; let controls=''; if(cfg.area==='web'){ controls=field('kind','1. Website oder Paket',``)+`

`+field('pages','2. Zusätzliche Seiten',num('pages',0,100))+`

Nur Seiten über den enthaltenen Umfang hinaus werden zusätzlich berechnet.

`+field('term','3. Laufende Website-Verwaltung',``)+`

Neue Funktionen, größere Erweiterungen und externe Hosting-, Domain- oder Lizenzkosten werden separat vereinbart.

`; }else{ const items=cfg.items.filter(x=>['once','device','user'].includes(x.basis)); controls=`
1. IT-Leistungen auswählen${items.map(x=>`
${x.basis==='once'?'':``}
`).join('')}
`+field('channel','2. Supportart',``)+field('hours','Gewünschte Supportstunden',num('hours',0,100,cfg.hour_step||'any'))+`

${cfg.hour_step?`Abrechnungsschritt: ${cfg.hour_step} Stunden.`:'Gewünschter Zeitbedarf. Stundensatz und Abrechnungstakt werden im Angebot festgelegt.'}

`+field('care','3. Monatliche IT-Betreuung',``)+`

Paketumfang, Gerätegrenzen, Lizenzen und Servicezeiten werden individuell vereinbart.

`; } root.innerHTML=`
${controls}
`; const form=root.querySelector('form');let lastText=''; function state(){const fd=new FormData(form);return cfg.area==='web'?{kind:fd.get('kind'),pages:fd.get('pages'),term:fd.get('term')}:{rows:fd.getAll('service').map(id=>({id,qty:fd.get('qty-'+id)||1})),hours:fd.get('hours'),channel:fd.get('channel'),care:fd.get('care')};} function update(){ form.querySelectorAll('[type=number]').forEach(i=>{let v=Number(i.value);if(i.value===''||!Number.isFinite(v))v=Number(i.min||0);v=Math.min(Number(i.max),Math.max(Number(i.min),v));if(i.step==='1')v=Math.floor(v);i.value=String(v);}); form.querySelectorAll('[name=service]').forEach(c=>{const q=form.querySelector(`[name="qty-${c.value}"]`);if(q)q.disabled=!c.checked;}); const s=state(); if(cfg.area==='web'){const base=cfg.items.find(x=>x.id===s.kind);const enabled=['website','bundle'].includes(s.kind);form.querySelector('[name=pages]').disabled=!enabled;form.querySelector('.pc-included').textContent=base.description+(base.included?` Enthalten: ${base.included} Inhaltsseiten.`:'');} const r=compute(cfg,s);lastText=summary(cfg,r); root.querySelector('.pc-lines').innerHTML=r.lines.map(l=>`
${esc(l.label)}${l.qty} × ${money(l.unit)} · ${unit[l.basis]}${money(l.total)}${l.period==='monthly'?'/ Monat':''}
`).join('')||'

Wählen Sie die gewünschte Leistung.

'; root.querySelector('.pc-totals').innerHTML=[['Einmalig',r.once],['Monatlich',r.monthly]].map(([label,p])=>`
${label}${money(p.total)}${p.unknown&&p.known?`Bekannter Teilbetrag: ${money(p.known)}`:''}
`).join(''); const tax={unconfirmed:'Steuerliche Preisangabe wird im Angebot bestätigt.',smallbusiness:'Keine Umsatzsteuer aufgrund der Kleinunternehmerregelung.',gross:'Preisangaben inklusive Umsatzsteuer.',net:'Nettopreise zuzüglich Umsatzsteuer · Geschäftskunden.'};root.querySelector('.pc-tax').textContent=tax[cfg.tax]||tax.unconfirmed; const link=whatsapp(contact.whatsapp,lastText),a=root.querySelector('.pc-send');a.href=link||contact.contact||'/kontakt/';a.textContent=link?'Via WhatsApp anfragen':'Kontakt aufnehmen';if(!link)a.removeAttribute('target'); root.querySelector('textarea').value=lastText; } form.addEventListener('input',update);form.addEventListener('change',update);form.addEventListener('submit',e=>e.preventDefault());form.addEventListener('reset',()=>queueMicrotask(update)); root.querySelector('.pc-copy').addEventListener('click',async()=>{try{await navigator.clipboard.writeText(lastText);root.querySelector('.pc-status').textContent='Zusammenfassung kopiert.';}catch{root.querySelector('details').open=true;const t=root.querySelector('textarea');t.focus();t.select();root.querySelector('.pc-status').textContent='Bitte die markierte Zusammenfassung kopieren.';}}); update(); });