`;
let resultsHtml = `
${eligibilityStatus}
`;
resultsHtml += summaryHtml;
if (advicePoints.length > 0) {
resultsHtml += "
";
advicePoints.forEach(point => {
resultsHtml += `- ${point}
`;
});
resultsHtml += "
";
} else if (statusClass === "likely-eligible" && paymentsMade >= 120) {
resultsHtml += "
Congratulations! Based on your inputs, you appear to meet the key requirements. Proceed to StudentAid.gov to apply for forgiveness using the PSLF Help Tool.
";
} else if (statusClass === "more-info" && advicePoints.length === 0) {
resultsHtml += "
Complete the previous tabs for an estimate.
";
}
resultsHtml += "
";
if(pslfe_domElements.resultsContainer) pslfe_domElements.resultsContainer.innerHTML = resultsHtml;
if(pslfe_domElements.pdfDownloadBtn) pslfe_domElements.pdfDownloadBtn.classList.remove('pslfe-hidden');
}
function pslfe_hexToRgb(hex) {
if (!hex || typeof hex !== 'string') return null;
const shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i;
hex = hex.replace(shorthandRegex, function(m, r, g, b) { return r + r + g + g + b + b; });
const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
return result ? { r: parseInt(result[1], 16), g: parseInt(result[2], 16), b: parseInt(result[3], 16) } : null;
}
function pslfe_generatePdf() {
if (typeof window.jspdf === 'undefined' || typeof window.jspdf.jsPDF === 'undefined' || typeof window.jspdf.jsPDF.API === 'undefined' || typeof window.jspdf.jsPDF.API.autoTable === 'undefined') {
alert("PDF generation library is not loaded."); return;
}
// Re-run validations and estimate generation to ensure data is fresh for PDF
if (!pslfe_validateTab1() || !pslfe_validateTab2() || !pslfe_validateTab3()) {
alert("Please ensure all inputs are correctly filled before generating PDF.");
if (!pslfe_validateTab1()) pslfe_navigateToTab('pslfe-tab1');
else if (!pslfe_validateTab2()) pslfe_navigateToTab('pslfe-tab2');
else if (!pslfe_validateTab3()) pslfe_navigateToTab('pslfe-tab3');
return;
}
pslfe_generateEligibilityEstimate();
if (pslfe_domElements.resultsContainer && pslfe_domElements.resultsContainer.innerHTML.includes("pslfe-error-message")) {
alert("Cannot generate PDF due to errors in input or calculation."); return;
}
const ActualJsPDF = window.jspdf.jsPDF;
const doc = new ActualJsPDF();
// Extract data from pslfe_userInputs and the generated HTML for consistency
const resultsContainer = document.getElementById('pslfe-resultsContainer');
const estimateTitle = resultsContainer.querySelector('h4') ? resultsContainer.querySelector('h4').textContent : "PSLF Eligibility Estimate";
const adviceItems = [];
resultsContainer.querySelectorAll('ul li').forEach(li => adviceItems.push(li.textContent));
doc.setFontSize(18);
const primaryColorRGB = pslfe_hexToRgb(getComputedStyle(document.documentElement).getPropertyValue('--pslfe-primary-color').trim());
if (primaryColorRGB) doc.setTextColor(primaryColorRGB.r, primaryColorRGB.g, primaryColorRGB.b); else doc.setTextColor(0,94,162);
doc.text("PSLF Eligibility Estimate Summary", 105, 22, null, null, "center");
doc.setFontSize(12);
doc.setTextColor(27,27,27);
let startY = 35;
doc.setFontSize(13);
const secondaryColorRGB = pslfe_hexToRgb(getComputedStyle(document.documentElement).getPropertyValue('--pslfe-secondary-color').trim());
if (secondaryColorRGB) doc.setTextColor(secondaryColorRGB.r, secondaryColorRGB.g, secondaryColorRGB.b); else doc.setTextColor(0,51,102);
doc.text("Your Provided Information:", 14, startY); startY += 8;
const inputDataBody = [
["Loan Types:", pslfe_userInputs.loanTypesText ? pslfe_userInputs.loanTypesText.join(', ') : 'N/A'],
["Full-time Employment:", pslfe_userInputs.isFullTimeText || 'N/A'],
["Employer Type:", pslfe_userInputs.employerTypeText || 'N/A'],
["Repayment Plan:", pslfe_userInputs.repaymentPlanText || 'N/A'],
["Est. Qualifying Payments Made:", pslfe_userInputs.paymentsMade !== undefined ? pslfe_userInputs.paymentsMade.toString() : 'N/A']
];
doc.autoTable({
startY: startY, theme: 'grid', headStyles: {fillColor: [secondaryColorRGB?.r||0, secondaryColorRGB?.g||51, secondaryColorRGB?.b||102], textColor: 255, fontSize:10},
body: inputDataBody, margin: { left: 14, right: 14 },
styles: { fontSize: 9, cellPadding: 2.5 },
columnStyles: { 0: { fontStyle: 'bold' } }
});
startY = doc.autoTable.previous.finalY + 12;
doc.setFontSize(13);
if (secondaryColorRGB) doc.setTextColor(secondaryColorRGB.r, secondaryColorRGB.g, secondaryColorRGB.b); else doc.setTextColor(0,51,102);
doc.text("Eligibility Estimate:", 14, startY); startY += 8;
doc.setFontSize(11);
doc.setTextColor(27,27,27);
doc.text(estimateTitle, 14, startY, {fontStyle: 'bold'}); startY += 7;
if (adviceItems.length > 0) {
adviceItems.forEach(item => {
const splitItem = doc.splitTextToSize(`• ${item}`, doc.internal.pageSize.width - 28 - 5); // 5 for bullet indent
doc.text(splitItem, 18, startY);
startY += (splitItem.length * (doc.getLineHeight() / doc.internal.scaleFactor * 0.85)) + 2;
});
}
startY += 5;
doc.setFontSize(10);
doc.setTextColor(27,27,27);
doc.setFont(undefined, 'bold');
doc.text("Official Guidance:", 14, startY); startY += 5;
doc.setFont(undefined, 'normal');
const officialGuidance = "This tool provides an estimate. For official PSLF tracking, employer certification, and to apply for forgiveness, always use the PSLF Help Tool on StudentAid.gov.";
const splitGuidance = doc.splitTextToSize(officialGuidance, doc.internal.pageSize.width - 28);
doc.text(splitGuidance, 14, startY);
startY += (splitGuidance.length * (doc.getLineHeight() / doc.internal.scaleFactor * 0.85)) + 2;
doc.setTextColor(primaryColorRGB?.r||0, primaryColorRGB?.g||94, primaryColorRGB?.b||162);
doc.textWithLink("StudentAid.gov/pslf", 14, startY, {url: "https://studentaid.gov/pslf/"});
doc.setFontSize(9);
doc.setTextColor(120);
doc.text(`Report generated on: ${new Date().toLocaleDateString()} ${new Date().toLocaleTimeString()}`, 14, doc.internal.pageSize.height - 10);
doc.save("PSLF_Eligibility_Estimate.pdf");
}
window.pslfe_switchTab = pslfe_switchTab;
window.pslfe_navigateToTab = pslfe_navigateToTab;
window.pslfe_generatePdf = pslfe_generatePdf;