`;
space.appendChild(card);
refreshCardSequenceNumbers();
executeMutahMathEngine();
}
function destroyCourseCard(id) {
const target = document.getElementById(`mutah-card-wrapper-${id}`);
if(target) { target.remove(); refreshCardSequenceNumbers(); executeMutahMathEngine(); }
}
function refreshCardSequenceNumbers() {
const cards = document.querySelectorAll('#bawsala-premium-calculator .mutah-course-card');
cards.forEach((card, i) => { card.querySelector('.row-counter-badge').innerText = i + 1; });
}
function toggleCardInputMode(id, mode) {
const btnNum = document.getElementById(`m-tab-num-${id}`);
const btnLet = document.getElementById(`m-tab-let-${id}`);
const label = document.getElementById(`m-dynamic-label-${id}`);
const slot = document.getElementById(`m-dynamic-slot-${id}`);
const errMsg = document.getElementById(`m-error-msg-${id}`);
errMsg.style.display = "none";
if(mode === 'num') {
btnNum.classList.add('active'); btnLet.classList.remove('active');
label.innerText = "العلامة (35-100)";
slot.innerHTML = `
`;
} else {
btnNum.classList.remove('active'); btnLet.classList.add('active');
label.innerText = "اختر التقدير المكتوب";
slot.innerHTML = `
`;
}
executeMutahMathEngine();
}
function triggerRepeatSlide(id) {
const checkbox = document.getElementById(`repeat-toggle-${id}`);
const wrapper = document.getElementById(`repeat-field-container-${id}`);
if(checkbox.checked) {
wrapper.innerHTML = `
`;
wrapper.style.maxHeight = "110px";
wrapper.style.opacity = "1";
} else {
wrapper.style.maxHeight = "0";
wrapper.style.opacity = "0";
setTimeout(() => { wrapper.innerHTML = ''; }, 350);
}
executeMutahMathEngine();
}
function validateAndExecuteEngine(inputEl, id, isOldField = false) {
const val = parseFloat(inputEl.value);
const errMsg = document.getElementById(isOldField ? `m-old-error-msg-${id}` : `m-error-msg-${id}`);
if(val > 100) {
inputEl.value = 100;
if(errMsg) errMsg.style.display = "block";
} else {
if(errMsg) errMsg.style.display = "none";
}
executeMutahMathEngine();
}
function executeMutahMathEngine() {
const cards = document.querySelectorAll('#bawsala-premium-calculator .mutah-course-card');
let totalCurrentHours = 0;
let weightedCurrentSum = 0;
let oldRepeatedHoursToSubtract = 0;
let oldRepeatedGradesToSubtract = 0;
let breakdownHTML = '';
cards.forEach((card, idx) => {
const nameInput = card.querySelector('.card-inp-name').value || `مادة ${idx + 1}`;
const hours = parseInt(card.querySelector('.card-inp-hours').value);
const scoreField = card.querySelector('.card-inp-score');
const textBadge = card.querySelector(`[id^="m-text-badge-id-"]`);
const isRepeat = card.querySelector('.card-inp-repeat-check').checked;
const oldScoreField = card.querySelector('.card-inp-old-score');
if(scoreField && scoreField.value !== "") {
let grade = parseFloat(scoreField.value);
if(grade < 35) grade = 35;
if(grade > 100) grade = 100;
let estimationText = 'مقبول';
let letterChar = 'B';
textBadge.classList.remove('fail-state');
// التعديل مية بالمية حسب نظام مؤتة: الـ 50 ضعيف وناجح، والرسوب تحت الـ 50 تماماً
if(grade >= 84) { estimationText = 'ممتاز'; letterChar = 'A'; }
else if(grade >= 76) { estimationText = 'جيد جداً'; letterChar = 'B'; }
else if(grade >= 68) { estimationText = 'جيد'; letterChar = 'C'; }
else if(grade >= 60) { estimationText = 'مقبول'; letterChar = 'D'; }
else if(grade >= 50) { estimationText = 'ضعيف'; letterChar = 'E'; }
else {
estimationText = 'راسب';
letterChar = 'F';
textBadge.classList.add('fail-state');
}
textBadge.innerText = estimationText;
totalCurrentHours += hours;
weightedCurrentSum += (grade * hours);
if(isRepeat && oldScoreField && oldScoreField.value !== "") {
let oldGrade = parseFloat(oldScoreField.value);
if(oldGrade < 35) oldGrade = 35;
if(oldGrade > 100) oldGrade = 100;
oldRepeatedHoursToSubtract += hours;
oldRepeatedGradesToSubtract += (oldGrade * hours);
}
breakdownHTML += `
${letterChar}
${nameInput}
${grade}/100
`;
}
});
const mainHoursDisplay = document.getElementById('mutah-hours-display');
const mainGpaDisplay = document.getElementById('mutah-gpa-display');
const mainBadgeDisplay = document.getElementById('mutah-badge-display');
const cumCard = document.getElementById('cumulative-sidebar-card');
const cumHoursDisplay = document.getElementById('mutah-cumulative-hours-display');
const cumGpaDisplay = document.getElementById('mutah-cumulative-gpa-display');
const cumBadgeDisplay = document.getElementById('mutah-cumulative-badge-display');
document.getElementById('mutah-items-summary').innerHTML = breakdownHTML;
if(totalCurrentHours === 0) {
mainGpaDisplay.innerText = "0.00";
mainHoursDisplay.innerText = "0";
mainBadgeDisplay.innerText = "أدخل المواد أولاً";
cumCard.style.display = "none";
return;
}
mainHoursDisplay.innerText = totalCurrentHours;
let semesterFinalGPA = weightedCurrentSum / totalCurrentHours;
mainGpaDisplay.innerText = semesterFinalGPA.toFixed(2);
if(semesterFinalGPA >= 84) mainBadgeDisplay.className = "gpa-pill-badge sem-badge", mainBadgeDisplay.innerText = "+ممتاز — Excellent";
else if(semesterFinalGPA >= 76) mainBadgeDisplay.className = "gpa-pill-badge sem-badge", mainBadgeDisplay.innerText = "+جيد جداً — Very Good";
else if(semesterFinalGPA >= 68) mainBadgeDisplay.className = "gpa-pill-badge sem-badge", mainBadgeDisplay.innerText = "جيد — Good";
else if(semesterFinalGPA >= 60) mainBadgeDisplay.className = "gpa-pill-badge sem-badge", mainBadgeDisplay.innerText = "مقبول — Pass";
else if(semesterFinalGPA >= 50) mainBadgeDisplay.className = "gpa-pill-badge sem-badge", mainBadgeDisplay.innerText = "ضعيف — Weak";
else mainBadgeDisplay.className = "gpa-pill-badge cum-badge-warn", mainBadgeDisplay.innerText = "راسب — Fail";
const prevGpaInput = document.getElementById('mutah-input-prev-gpa').value;
const prevHoursInput = document.getElementById('mutah-input-prev-hours').value;
const bannerBox = document.getElementById('mutah-trakoomy-banner');
if(prevGpaInput !== "" && prevHoursInput !== "") {
let pGpa = parseFloat(prevGpaInput);
let pHours = parseFloat(prevHoursInput);
let cumulativeTotalHours = (pHours - oldRepeatedHoursToSubtract) + totalCurrentHours;
let cumulativeTotalWeighted = ((pGpa * pHours) - oldRepeatedGradesToSubtract) + weightedCurrentSum;
let finalCumulativeGPA = cumulativeTotalWeighted / cumulativeTotalHours;
cumCard.style.display = "block";
cumHoursDisplay.innerText = cumulativeTotalHours;
cumGpaDisplay.innerText = finalCumulativeGPA.toFixed(2);
if(finalCumulativeGPA >= 84) cumBadgeDisplay.className = "gpa-pill-badge sem-badge", cumBadgeDisplay.innerText = "ممتاز — Excellent";
else if(finalCumulativeGPA >= 76) cumBadgeDisplay.className = "gpa-pill-badge sem-badge", cumBadgeDisplay.innerText = "جيد جداً — Very Good";
else if(finalCumulativeGPA >= 68) cumBadgeDisplay.className = "gpa-pill-badge sem-badge", cumBadgeDisplay.innerText = "جيد — Good";
else if(finalCumulativeGPA >= 60) cumBadgeDisplay.className = "gpa-pill-badge sem-badge", cumBadgeDisplay.innerText = "مقبول — Pass";
else if(finalCumulativeGPA >= 50) cumBadgeDisplay.className = "gpa-pill-badge sem-badge", cumBadgeDisplay.innerText = "ضعيف — Weak";
else cumBadgeDisplay.className = "gpa-pill-badge cum-badge-warn", cumBadgeDisplay.innerText = "إنذار أكاديمي — Academic Warning";
bannerBox.innerText = `المعدل التراكمي الجديد: ${finalCumulativeGPA.toFixed(2)}% لإجمالي ${cumulativeTotalHours} ساعة محتسبة.`;
bannerBox.style.background = "#f5e6e9";
bannerBox.style.color = "#6B001A";
} else {
cumCard.style.display = "none";
bannerBox.innerText = "أدخل الساعات والمعدل السابق لتفعيل حساب التراكمي الذكي";
bannerBox.style.background = "#ffffff";
bannerBox.style.color = "#718096";
}
}
function bootBawsalaEngine() {
buildNewCourseCard();
buildNewCourseCard();
document.getElementById('mutah-scale-slide').classList.add('open');
document.getElementById('mutah-scale-slide-icon').style.transform = "rotate(180deg)";
}
bootBawsalaEngine();