// transcript.js - Complete JavaScript for transcript page
$(document).ready(function() {
    // Function to load transcript data via AJAX
    function loadTranscriptData() {
        var collegeId = $('#college_id').val();
        var sectionId = $('#section_id').val();
        var programId = $('#program_id').val();
        var batchId = $('#batch_id').val();
        var semesterId = $('#semester_id').val();
        var isFinal = $('#is_final').val();
        var displayMode = $('#display_mode').val();
        var highlightF = $('#highlight_f').val();
        var subjectDisplay = $('#subject_display').val();
        
        if (!collegeId || !batchId || !semesterId) {
            return;
        }
        
        $('#loadingIndicator').show();
        $('#transcriptContainer').html('');
        $('#actionButtons').hide();
        
        $.ajax({
            url: window.location.pathname,
            type: 'GET',
            data: {
                ajax: 'get_transcript',
                college_id: collegeId,
                section_id: sectionId,
                program_id: programId,
                batch_id: batchId,
                semester_id: semesterId,
                is_final: isFinal
            },
            dataType: 'json',
            success: function(response) {
                if (response.success) {
                    renderTranscript(response, displayMode, highlightF, subjectDisplay);
                    $('#actionButtons').show();
                } else {
                    $('#transcriptContainer').html('<div class="transcript-card text-center"><h4>لا توجد بيانات</h4><p class="text-muted">لم يتم العثور على بيانات</p></div>');
                    $('#actionButtons').hide();
                }
            },
            error: function(xhr, status, error) {
                console.error('Error:', error);
                $('#transcriptContainer').html('<div class="transcript-card text-center"><h4>خطأ</h4><p class="text-muted">حدث خطأ في تحميل البيانات</p></div>');
                $('#actionButtons').hide();
            },
            complete: function() {
                $('#loadingIndicator').hide();
            }
        });
    }
    
    // Function to get student status badge
    function getStudentStatusBadge(status) {
        if (!status || status === '') {
            status = 'قيد الدراسة';
        }
        
        var statusClass = '';
        var statusText = '';
        
        switch(status) {
            case 'متخرج':
            case 'graduated':
                statusClass = 'status-graduated';
                statusText = 'متخرج';
                break;
            case 'مفصول':
            case 'suspended':
                statusClass = 'status-suspended';
                statusText = 'مفصول';
                break;
            case 'راسب':
            case 'failed':
                statusClass = 'status-failed';
                statusText = 'راسب';
                break;
            case 'منقول':
            case 'transfer':
                statusClass = 'status-transfer';
                statusText = 'منقول';
                break;
            default:
                statusClass = 'status-in-study';
                statusText = 'قيد الدراسة';
        }
        
        return '<span class="student-status ' + statusClass + '">' + statusText + '</span>';
    }
    
    // Function to get grade display with history
    function getGradeWithHistory(gradeData) {
        if (!gradeData) {
            return '--';
        }
        
        var displayGrade = gradeData.display_grade || '';
        
        if (!displayGrade) {
            return '--';
        }
        
        var historyParts = [];
        if (gradeData.reregrade) {
            historyParts.push('إعادة تقدير ثانية: ' + gradeData.reregrade);
        }
        if (gradeData.regrade) {
            historyParts.push('إعادة تقدير: ' + gradeData.regrade);
        }
        if (gradeData.original_grade && (gradeData.reregrade || gradeData.regrade)) {
            historyParts.push('الدرجة الأصلية: ' + gradeData.original_grade);
        }
        
        if (historyParts.length > 0) {
            return '<span class="grade-with-history grade-cell" title="' + historyParts.join(' | ') + '">' + displayGrade + '</span>';
        }
        
        return '<span class="grade-cell">' + displayGrade + '</span>';
    }
    
    // Function to render transcript with all features
    function renderTranscript(data, displayMode, highlightF, subjectDisplay) {
        var html = '';
        
        if (data.subject_list.length === 0 || data.students_data.length === 0) {
            html = '<div class="transcript-card text-center"><i class="fas fa-database fa-3x text-danger mb-3"></i><h4>لا توجد بيانات</h4><p class="text-muted">لم يتم العثور على مواد مسجلة أو طلاب</p></div>';
            $('#transcriptContainer').html(html);
            return;
        }
        
        html += '<div class="transcript-card" id="transcriptContent">';
        
        // Header
        html += '<div class="university-header">';
        html += '<div class="university-name">بسم الله الرحمن الرحيم</div>';
        html += '<div class="college-name">' + data.college_name + '</div>';
        html += '<div class="dept-name">القسم: ' + (data.section_name || 'العام') + '</div>';
        html += '<div class="dept-name">البرنامج: ' + (data.program_name || 'البكالريوس') + '</div>';
        html += '<div class="dept-name">الدفعة: ' + data.batch_value + '</div>';
        html += '<div style="margin-top: 10px;"></div>';
        html += '<div class="dept-name">الفصل الدراسي: ' + data.semester_name + '</div>';
        html += '<div class="dept-name">عدد الطلاب: ' + data.total_students + '</div>';
        html += '<div class="dept-name">نوع النتيجة: ' + (data.is_final ? 'المجلس العلمي للخريجين' : 'نتيجة نقل من عام إلى عام') + '</div>';
        html += '</div>';
        
        html += '<div class="filter-info">';
        html += '<span class="filter-tag"><i class="fas fa-university"></i> الكلية: ' + data.college_name + '</span>';
        if (data.section_name) html += '<span class="filter-tag"><i class="fas fa-layer-group"></i> القسم: ' + data.section_name + '</span>';
        if (data.program_name) html += '<span class="filter-tag"><i class="fas fa-graduation-cap"></i> البرنامج: ' + data.program_name + '</span>';
        html += '<span class="filter-tag"><i class="fas fa-users"></i> الدفعة: ' + data.batch_value + '</span>';
        html += '<span class="filter-tag"><i class="fas fa-calendar-alt"></i> الفصل: ' + data.semester_name + '</span>';
        html += '<span class="filter-tag"><i class="fas fa-print"></i> تاريخ الطباعة: ' + new Date().toLocaleDateString('ar-EG') + '</span>';
        html += '</div>';
        
        html += '<h4 style="text-align: center; margin: 15px 0; font-weight: bold;">كشف درجات الفصل</h4>';
        
        // Table 1: Subjects
        html += '<div class="table-header"><i class="fas fa-book ms-2"></i> جدول (1) المقررات الدراسية</div>';
        html += '<div class="scroll-wrapper"><table class="report-table"><thead>';
        html += '<th width="5%">م</th><th width="15%">رمز المادة</th><th width="55%">اسم المادة (عربي)</th><th width="10%">عدد الساعات</th><th width="15%">Subject Name (EN)</th>';
        html += '</thead><tbody>';
        
        $.each(data.subject_list, function(i, subject) {
            html += '<tr>';
            html += '<td>' + subject.no + '</td>';
            html += '<td>' + escapeHtml(subject.code) + '</td>';
            html += '<td class="text-right">' + escapeHtml(subject.name_ar) + '</td>';
            html += '<td>' + subject.credit_hours.toFixed(1) + '</td>';
            html += '<td>' + escapeHtml(subject.code) + '</td>';
            html += '</tr>';
        });
        
        html += '</tbody></table></div>';
        
        // Table 2: Statistics
        html += '<div class="table-header"><i class="fas fa-chart-bar ms-2"></i> جدول (2) توزيع الدرجات</div>';
        html += '<div class="scroll-wrapper"><table class="report-table"><thead>';
        html += '<th rowspan="2">م</th><th rowspan="2">رمز المادة</th><th rowspan="2">اسم المادة</th><th rowspan="2">س</th>';
        html += '<th colspan="8">توزيع الدرجات</th><th rowspan="2">المجموع</th>';
        html += '</tr><tr><th>A</th><th>B+</th><th>B</th><th>C+</th><th>C</th><th>D+</th><th>D</th><th>F</th>';
        html += '</thead><tbody>';
        
        $.each(data.subject_stats, function(i, stat) {
            html += '<tr>';
            html += '<td>' + stat.no + '</td>';
            html += '<td>' + escapeHtml(stat.code) + '</td>';
            html += '<td class="text-right">' + escapeHtml(stat.name_ar) + '</td>';
            html += '<td>' + stat.credit_hours.toFixed(1) + '</td>';
            html += '<td>' + stat.A + '</td><td>' + stat.Bplus + '</td><td>' + stat.B + '</td>';
            html += '<td>' + stat.Cplus + '</td><td>' + stat.C + '</td><td>' + stat.Dplus + '</td>';
            html += '<td>' + stat.D + '</td><td>' + stat.F + '</td>';
            html += '<td>' + stat.total + '</td>';
            html += '</tr>';
        });
        
        html += '</tbody></table></div>';
        
        // Table 3: Students with status
        html += '<div class="table-header"><i class="fas fa-users ms-2"></i> جدول (3) درجات الطلاب</div>';
        
        var colspanCount = (displayMode === 'both') ? 2 : 1;
        html += '<div class="scroll-wrapper"><table class="report-table" style="font-size: 10px; min-width: 1200px;"><thead>';
        html += '<th rowspan="2">م</th><th rowspan="2">رقم الطالب</th><th rowspan="2">اسم الطالب</th>';
        
        $.each(data.subject_list, function(i, subject) {
            var subjectHeader = '';
            if (subjectDisplay === 'code') {
                subjectHeader = escapeHtml(subject.code);
            } else if (subjectDisplay === 'name') {
                subjectHeader = escapeHtml(subject.name_ar);
            } else {
                subjectHeader = escapeHtml(subject.code) + '<br><small>' + escapeHtml(subject.name_ar) + '</small>';
            }
            html += '<th colspan="' + colspanCount + '">' + subjectHeader + '</th>';
        });
        
        html += '<th rowspan="2">الحالة</th>';
        html += '</thead><thead>';
        
        if (displayMode === 'both') {
            $.each(data.subject_list, function(i, subject) {
                html += '<th>تقدير</th><th>درجة</th>';
            });
        } else if (displayMode === 'grade_only') {
            $.each(data.subject_list, function(i, subject) {
                html += '<th>تقدير</th>';
            });
        } else {
            $.each(data.subject_list, function(i, subject) {
                html += '<th>درجة</th>';
            });
        }
        
        html += '</thead><tbody>';
        
        var rowNo = 1;
        $.each(data.students_data, function(i, student) {
            html += '<tr>';
            html += '<td>' + rowNo++ + '</td>';
            html += '<td>' + escapeHtml(student.student_id) + '</td>';
            html += '<td class="text-right">' + escapeHtml(student.student_name) + '</td>';
            
            $.each(data.subject_list, function(j, subject) {
                var gradeData = student.grades[subject.unique_key] || null;
                var gradeText = (gradeData && gradeData.display_grade) ? gradeData.display_grade : '--';
                var degreeText = (gradeData && gradeData.degree !== null) ? Math.round(gradeData.degree) : '--';
                
                var hasF = (gradeText && gradeText.indexOf('F') !== -1);
                var highlightClass = (highlightF === 'yes' && hasF) ? 'f-grade-highlight' : '';
                
                if (displayMode === 'both') {
                    html += '<td class="' + highlightClass + '" style="text-align: center;">' + gradeText + '</td>';
                    html += '<td class="' + highlightClass + '" style="text-align: center;">' + degreeText + '</td>';
                } else if (displayMode === 'grade_only') {
                    html += '<td class="' + highlightClass + '" style="text-align: center;">' + gradeText + '</td>';
                } else {
                    html += '<td class="' + highlightClass + '" style="text-align: center;">' + degreeText + '</td>';
                }
            });
            
            // Add student status with badge
            html += '<td>' + getStudentStatusBadge(student.student_status) + '</td>';
            html += '</tr>';
        });
        
        html += '</tbody></table></div>';
        
        // Footer
        html += '<div class="summary-footer">';
        html += '<div>تم الطباعة بتاريخ: ' + new Date().toLocaleString('ar-EG') + '</div>';
        html += '<div>عدد الطلاب: ' + data.total_students + '</div>';
        html += '<div>عدد المقررات: ' + data.subject_list.length + '</div>';
        html += '</div>';
        
        // Legend
        html += '<div class="grade-legend no-print">';
        html += '<strong><i class="fas fa-info-circle"></i> ملاحظة:</strong> ';
        html += 'الدرجات تظهر بالتنسيق: <strong>إعادة تقدير ثانية / إعادة تقدير / الدرجة الأصلية</strong>';
        if (highlightF === 'yes') {
            html += ' | <span style="background-color: #ffebee; color: #c62828; padding: 2px 5px; border-radius: 3px;">الدرجات التي تحتوي على F مميزة باللون الأحمر</span>';
        }
        html += '</div>';
        
        html += '</div>';
        
        $('#transcriptContainer').html(html);
    }
    
    function escapeHtml(text) {
        if (!text) return '';
        var map = {
            '&': '&amp;',
            '<': '&lt;',
            '>': '&gt;',
            '"': '&quot;',
            "'": '&#039;'
        };
        return String(text).replace(/[&<>"']/g, function(m) { return map[m]; });
    }
    
    function loadSections(collegeId) {
        var $sectionSelect = $('#section_id');
        
        if (collegeId && collegeId != '') {
            $sectionSelect.empty();
            $sectionSelect.append('<option value="">جار التحميل...</option>');
            $sectionSelect.prop('disabled', true);
            
            $.ajax({
                url: window.location.pathname,
                type: 'GET',
                data: { ajax: 'get_sections', college_id: collegeId },
                dataType: 'json',
                success: function(response) {
                    $sectionSelect.empty();
                    $sectionSelect.append('<option value="">جميع الأقسام</option>');
                    
                    if (response.success && response.sections && response.sections.length > 0) {
                        $.each(response.sections, function(index, section) {
                            $sectionSelect.append('<option value="' + section.id + '">' + escapeHtml(section.name) + '</option>');
                        });
                    }
                    $sectionSelect.prop('disabled', false);
                },
                error: function(xhr, status, error) {
                    console.error('AJAX Error:', error);
                    $sectionSelect.empty();
                    $sectionSelect.append('<option value="">خطأ في تحميل الأقسام</option>');
                    $sectionSelect.prop('disabled', false);
                }
            });
        } else {
            $sectionSelect.empty();
            $sectionSelect.append('<option value="">جميع الأقسام</option>');
            $sectionSelect.prop('disabled', false);
        }
    }
    
    function loadStudents() {
        var collegeId = $('#college_id').val();
        var batchId = $('#batch_id').val();
        var sectionId = $('#section_id').val();
        var programId = $('#program_id').val();
        var transcriptType = $('#transcript_type').val();
        
        if (transcriptType == 'student' && collegeId && batchId) {
            var $studentSelect = $('#student_id');
            $studentSelect.empty();
            $studentSelect.append('<option value="">جار التحميل...</option>');
            $studentSelect.prop('disabled', true);
            
            $.ajax({
                url: window.location.pathname,
                type: 'GET',
                data: {
                    ajax: 'get_students',
                    college_id: collegeId,
                    batch_id: batchId,
                    section_id: sectionId,
                    program_id: programId
                },
                dataType: 'json',
                success: function(response) {
                    $studentSelect.empty();
                    $studentSelect.append('<option value="">اختر الطالب</option>');
                    
                    if (response.success && response.students && response.students.length > 0) {
                        $.each(response.students, function(index, student) {
                            $studentSelect.append('<option value="' + student.id + '">' + escapeHtml(student.name) + '</option>');
                        });
                    } else {
                        $studentSelect.append('<option value="">لا يوجد طلاب</option>');
                    }
                    $studentSelect.prop('disabled', false);
                },
                error: function() {
                    $studentSelect.empty();
                    $studentSelect.append('<option value="">خطأ في تحميل الطلاب</option>');
                    $studentSelect.prop('disabled', false);
                }
            });
        }
    }
    
    // Event handlers
    $('#transcript_type').on('change', function() {
        if ($(this).val() === 'student') {
            $('#student_div').show();
            loadStudents();
        } else {
            $('#student_div').hide();
            $('#student_id').val('');
        }
        loadTranscriptData();
    });
    
    $('#college_id').on('change', function() {
        var collegeId = $(this).val();
        if (collegeId) {
            loadSections(collegeId);
        } else {
            $('#section_id').empty().append('<option value="">جميع الأقسام</option>');
        }
        loadTranscriptData();
    });
    
    $('#section_id, #program_id, #batch_id, #semester_id').on('change', function() {
        loadTranscriptData();
        if ($('#transcript_type').val() == 'student') {
            loadStudents();
        }
    });
    
    $('#display_mode, #highlight_f, #subject_display').on('change', function() {
        loadTranscriptData();
    });
    
    $('#applyFiltersBtn').on('click', function() {
        loadTranscriptData();
    });
    
    $('#toggleFinalBtn').on('click', function() {
        var currentVal = $('#is_final').val();
        var newVal = currentVal == '1' ? '0' : '1';
        $('#is_final').val(newVal);
        
        if (newVal == '1') {
            $(this).addClass('final');
            $(this).html('<i class="fas fa-toggle-on ms-2"></i> المجلس العلمي');
        } else {
            $(this).removeClass('final');
            $(this).html('<i class="fas fa-toggle-off ms-2"></i> نتائج سنوية');
        }
        
        loadTranscriptData();
    });
    
    $('#resetBtn').on('click', function() {
        $('#college_id').val('');
        $('#section_id').empty().append('<option value="">جميع الأقسام</option>');
        $('#program_id').val('');
        $('#batch_id').val('');
        $('#semester_id').val('');
        $('#student_id').empty().append('<option value="">اختر الطالب</option>');
        $('#is_final').val('0');
        $('#display_mode').val('grade_only');
        $('#highlight_f').val('no');
        $('#subject_display').val('code');
        $('#toggleFinalBtn').removeClass('final').html('<i class="fas fa-toggle-off ms-2"></i> نتائج سنوية');
        $('#transcriptContainer').html('<div class="transcript-card text-center"><i class="fas fa-filter fa-3x text-muted mb-3 opacity-50"></i><h4>اختر معايير البحث</h4><p class="text-muted">الرجاء اختيار الكلية، الدفعة، والفصل الدراسي لعرض كشف الدرجات</p></div>');
        $('#actionButtons').hide();
    });
    
    // Initial load
    if ($('#college_id').val() && $('#batch_id').val() && $('#semester_id').val()) {
        loadSections($('#college_id').val());
        loadTranscriptData();
        if ($('#transcript_type').val() == 'student') {
            loadStudents();
        }
    }
});

// PDF Download Function
function downloadAsPDF() {
    var element = document.getElementById('transcriptContent');
    if (!element) return;
    
    var loadingMsg = $('<div class="pdf-loading-message">جاري إنشاء ملف PDF...<br>قد يستغرق هذا بضع ثوانٍ</div>');
    $('body').append(loadingMsg);
    loadingMsg.fadeIn(200);
    
    var opt = {
        margin: [0.2, 0.2, 0.2, 0.2],
        filename: 'transcript_' + new Date().getTime() + '.pdf',
        image: { type: 'jpeg', quality: 0.98 },
        html2canvas: { scale: 2, letterRendering: true, useCORS: true, logging: false },
        jsPDF: { unit: 'in', format: 'a4', orientation: 'landscape' }
    };
    
    html2pdf().set(opt).from(element).save().then(function() {
        loadingMsg.fadeOut(200, function() { $(this).remove(); });
    }).catch(function(err) {
        console.error('PDF Error:', err);
        loadingMsg.fadeOut(200, function() { $(this).remove(); });
        alert('حدث خطأ أثناء تحميل PDF. يرجى استخدام زر الطباعة (Ctrl+P).');
    });
}