const pdfjsLib=window['pdfjs-dist/build/pdf'];
pdfjsLib.GlobalWorkerOptions.workerSrc='https://cdnjs.cloudflare.com/ajax/libs/pdf.js/3.4.120/pdf.worker.min.js';
document.addEventListener('DOMContentLoaded', ()=> {
const modal=document.getElementById('ifp-modal');
const openBtn=document.getElementById('ifp-open-modal');
const saveBtn=document.getElementById('ifp-save-pdf');
const fieldsOverlay=document.getElementById('ifp-html-fields');
const sigCanvas=document.getElementById('signature-pad');
const sigPad=new SignaturePad(sigCanvas);
let pdfDocLib;
const targetInput=document.getElementById('form-field-form_base');
if(targetInput){
targetInput.classList.add('ifp-locked');
targetInput.setAttribute('readonly', true);
targetInput.addEventListener('click', (e)=> {
e.preventDefault();
alert("Este archivo se genera automáticamente al completar el formulario PDF arriba.");
});
}
if(openBtn){
openBtn.addEventListener('click', async (e)=> {
e.preventDefault();
modal.style.display='flex';
await loadAndRenderPDF(ifp_vars.pdf_url);
});
}
document.getElementById('ifp-close-modal').onclick=()=> modal.style.display='none';
document.getElementById('ifp-clear-sig').onclick=()=> sigPad.clear();
async function loadAndRenderPDF(url){
const bytes=await fetch(url).then(res=> res.arrayBuffer());
pdfDocLib=await PDFLib.PDFDocument.load(bytes);
const loadingTask=pdfjsLib.getDocument(url);
const pdf=await loadingTask.promise;
const page=await pdf.getPage(1);
const scale=1.5;
const viewport=page.getViewport({ scale });
const canvas=document.getElementById('ifp-pdf-render');
const context=canvas.getContext('2d');
canvas.height=viewport.height;
canvas.width=viewport.width;
await page.render({ canvasContext: context, viewport }).promise;
fieldsOverlay.innerHTML='';
const form=pdfDocLib.getForm();
form.getFields().forEach(field=> {
field.acroField.getWidgets().forEach((widget, index)=> {
const rect=widget.getRectangle();
const element=document.createElement('input');
element.type=(field instanceof PDFLib.PDFTextField) ? 'text':'checkbox';
if(element.type==='checkbox') element.dataset.index=index;
element.className='ifp-dynamic-field';
element.dataset.name=field.getName();
element.style.left=`${rect.x * scale}px`;
element.style.top=`${(viewport.height - (rect.y + rect.height) * scale)}px`;
element.style.width=`${rect.width * scale}px`;
element.style.height=`${rect.height * scale}px`;
fieldsOverlay.appendChild(element);
if(field instanceof PDFLib.PDFRadioGroup||field instanceof PDFLib.PDFCheckBox){
element.onclick=(e)=> {
document.querySelectorAll(`input[data-name="${field.getName()}"]`).forEach(s=> { if(s!==e.target) s.checked=false; });
};}});
});
}
saveBtn.onclick=async ()=> {
const inputs=document.querySelectorAll('.ifp-dynamic-field');
let valid=true;
inputs.forEach(i=> {
if(i.type==='text'&&!i.value.trim()){ i.classList.add('required-missing'); valid=false; }else{ i.classList.remove('required-missing'); }});
if(sigPad.isEmpty()){ alert("La firma es obligatoria."); return; }
if(!valid){ alert("Complete todos los campos del PDF."); return; }
const form=pdfDocLib.getForm();
const fieldData={};
inputs.forEach(i=> { if(!fieldData[i.dataset.name]) fieldData[i.dataset.name]=[]; fieldData[i.dataset.name].push(i); });
for (const name in fieldData){
try {
const field=form.getField(name);
const group=fieldData[name];
if(field instanceof PDFLib.PDFTextField) field.setText(group[0].value);
else if(field instanceof PDFLib.PDFRadioGroup){
const idx=group.findIndex(i=> i.checked);
if(idx!==-1) field.select(field.getOptions()[idx]);
}
else if(field instanceof PDFLib.PDFCheckBox) group[0].checked ? field.check():field.uncheck();
} catch (e){}}
const sigImage=await pdfDocLib.embedPng(sigPad.toDataURL());
pdfDocLib.getPages()[0].drawImage(sigImage, { x: 410, y: 65, width: 130, height: 50 });
const pdfBytes=await pdfDocLib.save();
const file=new File([pdfBytes], "solicitud_firmada.pdf", { type: "application/pdf" });
if(targetInput){
const dataTransfer=new DataTransfer();
dataTransfer.items.add(file);
targetInput.files=dataTransfer.files;
targetInput.classList.remove('ifp-locked');
targetInput.removeAttribute('readonly');
alert("PDF listo y vinculado correctamente.");
modal.style.display='none';
}};});