Sleep Quality Self-Assessment

Sleep Quality Self-Assessment

User Details
Sleep Habits & Feelings

Personalized Recommendations:

    ${adviceHTML}
`; // Update Chart const chartCtx = document.getElementById('score-chart').getContext('2d'); if (scoreChartInstance) { scoreChartInstance.destroy(); } scoreChartInstance = new Chart(chartCtx, { type: 'doughnut', data: { labels: ['Sleep Quality Score', ''], datasets: [{ data: [results.percentage, 100 - results.percentage], backgroundColor: [results.colorClass.replace('text-', 'bg-').replace('-600', '-500'), '#e5e7eb'], borderColor: ['#ffffff'], borderWidth: 4, }] }, options: { responsive: true, cutout: '70%', plugins: { legend: { display: false }, tooltip: { enabled: false } } } }); resultsSection.style.display = 'block'; resultsSection.scrollIntoView({ behavior: 'smooth' }); } /** * Generates and downloads a PDF report. */ async function generatePdf() { const { jsPDF } = window.jspdf; const doc = new jsPDF({ orientation: 'p', unit: 'mm', format: 'a4' }); const results = calculateScore(); if (!results) return; const userName = document.getElementById('user-name').value || 'N/A'; const assessmentDate = assessmentDateInput.value ? new Date(assessmentDateInput.value).toLocaleDateString() : 'N/A'; const pageHeight = doc.internal.pageSize.height; const pageWidth = doc.internal.pageSize.width; const margin = 15; let y = margin; // Header doc.setFont('helvetica', 'bold'); doc.setFontSize(20); doc.text('Sleep Quality Assessment Report', margin, y); y += 15; // User Info doc.setFont('helvetica', 'bold'); doc.setFontSize(11); doc.text('Name:', margin, y); doc.setFont('helvetica', 'normal'); doc.text(userName, margin + 20, y); doc.setFont('helvetica', 'bold'); doc.text('Date:', pageWidth / 2 + 20, y); doc.setFont('helvetica', 'normal'); doc.text(assessmentDate, pageWidth / 2 + 35, y); y += 10; doc.setDrawColor(226, 232, 240); doc.line(margin, y, pageWidth - margin, y); y += 15; // Result Summary doc.setFont('helvetica', 'bold'); doc.setFontSize(14); doc.text('Assessment Result', margin, y); y += 10; doc.setFontSize(12); doc.text('Overall Sleep Quality:', margin, y); doc.setFont('helvetica', 'bold'); if (results.level.includes('Good')) doc.setTextColor(34, 197, 94); else if (results.level.includes('Moderate')) doc.setTextColor(234, 179, 8); else doc.setTextColor(220, 38, 38); doc.text(results.level, margin + 55, y); doc.setTextColor(0, 0, 0); y += 15; // Recommendations doc.setFont('helvetica', 'bold'); doc.setFontSize(12); doc.text('Personalized Recommendations:', margin, y); y += 8; doc.setFont('helvetica', 'normal'); doc.setFontSize(10); results.advice.forEach(item => { const lines = doc.splitTextToSize(`- ${item}`, pageWidth - (margin * 2) - 5); doc.text(lines, margin + 5, y); y += lines.length * 5 + 2; if (y > pageHeight - 25) { doc.addPage(); y = margin; } }); if (results.advice.length === 0) { doc.text('- Your habits indicate excellent sleep hygiene. Keep it up!', margin + 5, y); y += 7; } // Footer doc.setFontSize(8); doc.setTextColor(148, 163, 184); doc.text(`This self-assessment is for informational purposes and is not a substitute for a medical diagnosis.`, margin, pageHeight - 15); doc.text(`If you have persistent sleep problems, consult a healthcare professional.`, margin, pageHeight - 10); doc.save(`Sleep_Quality_Report_${userName.replace(/ /g, '_')}.pdf`); } // --- EVENT LISTENERS --- if(calculateBtn) calculateBtn.addEventListener('click', displayResults); if(downloadPdfBtn) downloadPdfBtn.addEventListener('click', generatePdf); // --- INITIALIZATION --- assessmentDateInput.valueAsDate = new Date(); });
Scroll to Top