export function renderIPU(data, enrollmentNo) { if (!data) { const card = createErrorCard('IPU', enrollmentNo, 'Student data not available'); return card; } const card = createProfileCard('ipu', 'Academic Profile'); // Profile header card.querySelector('.user-info').innerHTML = `
${data.name || 'Student'}
Enrollment: ${data.enrollment_no || 'N/A'}
${data.programme?.branch_name ? `
Program: ${data.programme.branch_name}
` : ''} ${data.institute?.insti_name ? `
Institute: ${data.institute.insti_name}
` : ''} ${data.programme?.course_name ? `
Course: ${data.programme.course_name}
` : ''} `; // Add student photo if available if (data.img) { const profilePic = card.querySelector('.profile-pic'); profilePic.src = `https://ipuranklist.com/student_images/${data.img}.jpg`; profilePic.onerror = () => { profilePic.style.display = 'none'; }; } // Overall stats const statsGrid = card.querySelector('.stats-grid'); statsGrid.innerHTML = ''; // Get latest result if available const validResults = data.results?.filter(r => r.sgpa > 0) || []; if (validResults.length > 0) { const latestResult = validResults[validResults.length - 1]; statsGrid.innerHTML += `
${latestResult.sgpa ? latestResult.sgpa.toFixed(2) : 'N/A'}
Latest SGPA
${latestResult.percentage ? latestResult.percentage.toFixed(2) : 'N/A'}%
Percentage
${validResults.length}
Completed Semesters
${latestResult.result_no || 'N/A'}
Current Sem
`; } // Overall CGPA if (data.cgpa && data.cgpa > 0) { const cgpaCard = document.createElement('div'); cgpaCard.className = 'stat-card'; cgpaCard.innerHTML = `
${data.cgpa.toFixed(2)}
Overall CGPA
`; statsGrid.appendChild(cgpaCard); } // Academic history section if (validResults.length > 0) { const historySection = document.createElement('div'); historySection.innerHTML = '

Academic History

'; const historyList = document.createElement('ul'); historyList.className = 'content-list'; // Sort results by result_no (semester number) const sortedResults = [...validResults].sort((a, b) => a.result_no - b.result_no); sortedResults.forEach(result => { historyList.innerHTML += `
  • Semester ${result.result_no}: SGPA: ${result.sgpa.toFixed(2)} | Percentage: ${result.percentage.toFixed(2)}%
  • `; }); historySection.appendChild(historyList); card.querySelector('.profile-body').appendChild(historySection); } // Subject performance - per semester (SHOWS ALL SUBJECTS) if (validResults.length > 0) { // Sort results by result_no const sortedResults = [...validResults].sort((a, b) => a.result_no - b.result_no); // Process each semester sortedResults.forEach(result => { if (result.subject_results && result.subject_results.length > 0) { const semesterSection = document.createElement('div'); semesterSection.innerHTML = `

    Semester ${result.result_no} Subjects

    `; const subjectsList = document.createElement('ul'); subjectsList.className = 'content-list'; // Display ALL subjects (no sorting, just show all) result.subject_results.forEach(subject => { subjectsList.innerHTML += `
  • ${subject.subject_name || 'Unknown Subject'}: ${subject.total_marks}/${subject.max_credits * 100} ${subject.grade} ${subject.minor !== undefined && subject.major !== undefined ? `
    Minor: ${subject.minor}/25 | Major: ${subject.major}/75
    ` : ''}
  • `; }); semesterSection.appendChild(subjectsList); card.querySelector('.profile-body').appendChild(semesterSection); } }); } // Overall grade distribution if (validResults.length > 0) { // Get all subject results from all semesters let allSubjectResults = []; validResults.forEach(result => { if (result.subject_results) { allSubjectResults = allSubjectResults.concat(result.subject_results); } }); // Group by grade const gradeDistribution = {}; allSubjectResults.forEach(subject => { const grade = subject.grade || 'N/A'; if (!gradeDistribution[grade]) { gradeDistribution[grade] = 0; } gradeDistribution[grade]++; }); // Create grade distribution section const gradeSection = document.createElement('div'); gradeSection.innerHTML = '

    Grade Distribution

    '; const tagsContainer = document.createElement('div'); tagsContainer.className = 'tags-container'; Object.entries(gradeDistribution).sort((a, b) => b[1] - a[1]).forEach(([grade, count]) => { tagsContainer.innerHTML += ` ${grade}: ${count} `; }); gradeSection.appendChild(tagsContainer); card.querySelector('.profile-body').appendChild(gradeSection); } // Add DSA course performance if available if (data.subjects && validResults.length > 0) { const dsaSubject = data.subjects.find(s => s.name && (s.name.toLowerCase().includes('design and analysis of algorithms') || s.paper_code === 'AIDS303' || s.paper_code === 'AIDS353') ); if (dsaSubject) { // Find the result for this subject let dsaResult = null; for (const result of validResults) { dsaResult = result.subject_results.find(sr => sr.subject_id === dsaSubject._id); if (dsaResult) break; } if (dsaResult) { const dsaSection = document.createElement('div'); dsaSection.innerHTML = `

    DSA Course Performance

    ${dsaResult.total_marks}
    Total Marks
    ${dsaResult.grade}
    Grade
    ${dsaResult.minor || 'N/A'}
    Minor Exam
    ${dsaResult.major || 'N/A'}
    Major Exam
    `; card.querySelector('.profile-body').appendChild(dsaSection); } } } return card; } function createProfileCard(platform, title) { const card = document.createElement('div'); card.className = `profile-card ${platform}-card`; card.innerHTML = `
    ${title.charAt(0)}

    ${title}

    Profile
    `; return card; } function createErrorCard(platform, enrollmentNo, message) { const card = document.createElement('div'); card.className = `profile-card ${platform}-card`; card.innerHTML = `
    I

    Academic Profile

    ⚠️
    Error loading academic data for enrollment "${enrollmentNo}": ${message}
    `; return card; }