import {renderPage,pages,titles} from './content.mjs'; const page=document.body.dataset.page||'index'; let lang='es';try{lang=localStorage.getItem('suave-language')==='en'?'en':'es'}catch{} let step=0; const formData={patient:'new',reason:'exam',date:'',time:'any',name:'',phone:'',email:'',insurance:'unsure'}; const tr=(es,en)=>lang==='es'?es:en; const escapeHTML=(s)=>String(s).replace(/[&<>"']/g,c=>({'&':'&','<':'<','>':'>','"':'"',"'":'''}[c])); const reasonLabel=(v)=>({exam:tr('Examen o limpieza','Exam or cleaning'),filling:tr('Caries o empaste','Cavity or filling'),pain:tr('Dolor dental','Toothache'),implant:tr('Implantes','Dental implants'),arch:tr('Arcada completa','Full arch'),other:tr('Otra consulta','Other visit')})[v]; const timeLabel=(v)=>({any:tr('Sin preferencia','No preference'),morning:tr('Por la mañana','Morning'),afternoon:tr('Por la tarde','Afternoon')})[v]; const insuranceLabel=(v)=>({yes:tr('Tengo seguro dental','I have dental insurance'),no:tr('No tengo seguro dental','I do not have dental insurance'),unsure:tr('Prefiero consultarlo con recepción','I’d like to discuss it with the front desk')})[v]; const choice=(name,value,label)=>``; const option=(value,label,selected)=>``; function today(){const d=new Date();return `${d.getFullYear()}-${String(d.getMonth()+1).padStart(2,'0')}-${String(d.getDate()).padStart(2,'0')}`} function render(){document.documentElement.lang=lang;document.title=`${titles[lang][pages.indexOf(page)]} | Suave Dental · Newark`;document.body.innerHTML=renderPage(page,lang);document.querySelector('.menu-btn').addEventListener('click',e=>{const button=e.currentTarget;const open=button.getAttribute('aria-expanded')==='true';button.setAttribute('aria-expanded',String(!open));document.querySelector('.navigation').classList.toggle('is-open',!open)});document.querySelectorAll('[data-lang]').forEach(b=>b.addEventListener('click',()=>{capture();lang=b.dataset.lang;try{localStorage.setItem('suave-language',lang)}catch{}render();document.querySelector(`[data-lang="${lang}"]`).focus()}));if(page==='contact')initForm()} function capture(){const form=document.querySelector('#booking-form');if(!form)return;for(const [key,value] of new FormData(form).entries())if(key in formData)formData[key]=value.trim()} function initForm(){const form=document.querySelector('#booking-form');form.addEventListener('submit',e=>{e.preventDefault();capture();if(!validate())return;if(step<4){step++;renderStep(true)}else{step=5;renderStep(true)}});document.querySelector('#back').addEventListener('click',()=>{capture();step=Math.max(0,step-1);renderStep(true)});renderStep()} function validate(){let error='';if(step===1){const selected=new Date(formData.date+'T12:00:00');if(!formData.date||formData.dateli.classList.toggle('complete',i<=step));document.querySelector('.form-actions').hidden=step===5;document.querySelector('#back').hidden=step===0;document.querySelector('#next').innerHTML=step===4?tr('Probar solicitud de cita','Test appointment request'):tr('Continuar →','Continue →'); if(step===0)target.innerHTML=`
${tr('¿Es tu primera visita?','Is this your first visit?')}${choice('patient','new',tr('Soy paciente nuevo','I’m a new patient'))}${choice('patient','existing',tr('Ya soy paciente','I’m an existing patient'))}
`; if(step===1)target.innerHTML=`
${tr('Los detalles de tu visita','Your appointment details')}

${tr('La fecha es una preferencia, no un horario reservado. Cerrado los miércoles y domingos.','Your date is a preference, not a reserved time. Closed Wednesdays and Sundays.')}

`; if(step===2)target.innerHTML=`
${tr('¿Cómo podemos contactarte?','How can we contact you?')}

${tr('Usa datos de prueba en esta demostración.','Use test information in this demonstration.')}

`; if(step===3)target.innerHTML=`
${tr('Tu seguro dental','Your dental insurance')}${['yes','no','unsure'].map(v=>choice('insurance',v,insuranceLabel(v))).join('')}

${tr('Información opcional. Los seguros aceptados están por confirmar (TBD). No necesitamos números de póliza ni documentos aquí.','Optional information. Accepted plans are to be confirmed (TBD). We do not need policy numbers or documents here.')}

`; if(step===4){const rows=[[tr('Paciente','Patient'),formData.patient==='new'?tr('Nuevo','New'):tr('Existente','Existing')],[tr('Visita','Visit'),reasonLabel(formData.reason)],[tr('Fecha preferida','Preferred date'),formData.date],[tr('Horario','Time'),timeLabel(formData.time)],[tr('Nombre','Name'),formData.name],[tr('Teléfono','Phone'),formData.phone],[tr('Correo','Email'),formData.email||'—'],[tr('Seguro','Insurance'),insuranceLabel(formData.insurance)]];target.innerHTML=`

${tr('Revisa tu solicitud de prueba','Review your test request')}

${rows.map(([a,b])=>`
${a}
${escapeHTML(b)}
`).join('')}

${tr('Al continuar, solo verás cómo termina el formulario. No se enviará ninguna solicitud.','Continuing only demonstrates the end of the form. No request will be sent.')}

`} if(step===5)target.innerHTML=`
✓

${tr('Así de fácil será pedir tu cita.','That’s how simple requesting a visit will be.')}

${tr('Has completado la demostración. No se enviaron datos y no se reservó ninguna cita. Para reservar una cita real, llama a recepción.','You’ve completed the demonstration. No information was sent and no appointment was booked. To book a real visit, call our front desk.')}

${tr('Llamar al','Call')} 973-268-9595
`; if(step===5)document.querySelector('#restart').addEventListener('click',()=>{Object.assign(formData,{patient:'new',reason:'exam',date:'',time:'any',name:'',phone:'',email:'',insurance:'unsure'});step=0;renderStep(true)}); if(focus)target.querySelector('[tabindex="-1"]')?.focus(); } render();