`;
});
let comparisonTableHtml = `Metric `;
results.forEach(res => comparisonTableHtml += `${res.name} `);
comparisonTableHtml += ` `;
let lowestTotalCostPdf = Infinity; let bestLenderNamePdf = "";
results.forEach(res => { if (res.totalCostOfLoan < lowestTotalCostPdf) { lowestTotalCostPdf = res.totalCostOfLoan; bestLenderNamePdf = res.name; }});
const metricsPdf = [
{ label: "Monthly Payment (P&I)", key: "monthlyPayment", format: lci_formatCurrency },
{ label: "Total Upfront Fees", key: "totalUpfrontFees", format: lci_formatCurrency },
{ label: "Total Monthly Fees (Term)", key: "totalMonthlyAccountFees", format: lci_formatCurrency },
{ label: "Total Interest Paid", key: "totalInterestPaid", format: lci_formatCurrency },
{ label: "Total Cost of Loan", key: "totalCostOfLoan", format: lci_formatCurrency, highlight: true }
];
metricsPdf.forEach(metric => {
comparisonTableHtml += `${metric.label.replace(/|<\/strong>/g,"")} `;
results.forEach(res => {
const value = res[metric.key];
const displayValue = metric.format(value);
const isBest = metric.highlight && res.name === bestLenderNamePdf;
comparisonTableHtml += `${displayValue} `;
});
comparisonTableHtml += ` `;
});
comparisonTableHtml += ``;
let conclusionTextPdf = bestLenderNamePdf ? `Based on inputs, ${bestLenderNamePdf} offers the lowest estimated Total Cost of Loan (${lci_formatCurrency(lowestTotalCostPdf)}).` : "Review details for each lender.";
const interpretationNote_pdf = `This comparison is based on your inputs. Total Cost of Loan = Total Interest + All Fees. Verify all terms with lenders. Not financial advice.`;
pdfContentEl.innerHTML = `
${comparisonTableHtml}
Lender Offer Comparison Report
${commonInputsHtml}
${lenderDetailsHtml}
III. Comparative Analysis Summary
${conclusionTextPdf}
Important Notes: ${interpretationNote_pdf}
`;
document.body.appendChild(pdfContentEl);
html2canvas(pdfContentEl, { scale: 2, useCORS: true, logging:true, width: pdfContentEl.scrollWidth, windowHeight: pdfContentEl.scrollHeight }).then(canvas => {
const imgData = canvas.toDataURL('image/png');
const pdfWidth = pdf.internal.pageSize.getWidth();
const pdfHeight = pdf.internal.pageSize.getHeight();
let numPages = Math.ceil(canvas.height / ( (pdfHeight - 40) * (canvas.width / (pdfWidth - 40)) ) );
let pageCanvasHeight = (pdfHeight - 40) * (canvas.width / (pdfWidth - 40));
for (let i = 0; i < numPages; i++) {
if (i > 0) pdf.addPage();
let sourceY = i * pageCanvasHeight;
let sourceHeight = Math.min(pageCanvasHeight, canvas.height - sourceY);
const tempCanvas = document.createElement('canvas');
tempCanvas.width = canvas.width;
tempCanvas.height = sourceHeight;
const ctx = tempCanvas.getContext('2d');
ctx.drawImage(canvas, 0, sourceY, canvas.width, sourceHeight, 0, 0, canvas.width, sourceHeight);
const pageImgData = tempCanvas.toDataURL('image/png');
const pageImgHeight = (sourceHeight * (pdfWidth - 40)) / canvas.width;
pdf.addImage(pageImgData, 'PNG', 20, 20, pdfWidth - 40, pageImgHeight, undefined, 'FAST');
}
pdf.save('Lender_Offer_Comparison.pdf');
if(document.body.contains(pdfContentEl)) document.body.removeChild(pdfContentEl);
}).catch(err => {
console.error("LCI PDF Error:", err); alert("Error generating PDF. See console.");
if(document.body.contains(pdfContentEl)) document.body.removeChild(pdfContentEl);
});
}
document.addEventListener('DOMContentLoaded', function() {
lci_generateLenderInputs();
// Default some values for quicker testing
const loanDesiredEl = document.getElementById('lci_loanAmountDesired');
if(loanDesiredEl && !loanDesiredEl.value) loanDesiredEl.value = '10000';
const termDesiredEl = document.getElementById('lci_desiredLoanTermDuration');
if(termDesiredEl && !termDesiredEl.value) termDesiredEl.value = '5';
// Default first lender for quicker testing
const lender1Principal = document.getElementById('lci_loanPrincipalOffered_1');
if(lender1Principal && !lender1Principal.value) lender1Principal.value = '10000';
const lender1Rate = document.getElementById('lci_annualInterestRate_1');
if(lender1Rate && !lender1Rate.value) lender1Rate.value = '8';
const lender1Term = document.getElementById('lci_loanTermOfferedDuration_1');
if(lender1Term && !lender1Term.value) lender1Term.value = '5';
if (!document.getElementById('lci_numLenders')) {
console.error("Critical input 'lci_numLenders' not found.");
}
});
