$(document).ready(function () {
    const $searchForm = $('#searchForm');
    const $resultEntryContainer = $('#resultEntryContainer');
    const $studentInfoDisplay = $('#studentInfoDisplay');
    const $subjectsTableBody = $('#subjectsTableBody');
    const $saveResultForm = $('#saveResultForm');
    const $btnSave = $('#btnSave');
    const $formAlert = $('#formAlert');


    // Search for student
    $searchForm.on('submit', function (e) {
        e.preventDefault();
        const registrationNo = $('#registrationNo').val();
        const darja = $('#darja').val();

        if (!registrationNo || !darja) {
            showAlert('رجسٹریشن نمبر اور درجہ منتخب کریں', 'danger');
            return;
        }

        $resultEntryContainer.addClass('d-none');
        showAlert('طالب علم کی تفصیلات تلاش کی جا رہی ہیں...', 'info');

        $.ajax({
            url: 'APIs/getStudentResultData.php',
            method: 'GET',
            data: {
                registrationNo: registrationNo,
                darja: darja
            },
            success: function (response) {
                if (response.success) {
                    displayStudentInfo(response.student);
                    setupFields(response.dates);
                    renderSubjectsTable(response.subjects);
                    $resultEntryContainer.removeClass('d-none');
                    showAlert('', ''); // Clear alert
                } else {
                    showAlert(response.message, 'warning');
                }
            },
            error: function () {
                showAlert('سرور سے رابطہ کرنے میں ناکامی آئی', 'danger');
            }
        });
    });

    function displayStudentInfo(student) {
        let html = `
            <div class="row g-3">
                <div class="col-md-4"><strong>رجسٹریشن نمبر:</strong> <span class="bg-white px-2 rounded">${student.registrationNo}</span></div>
                <div class="col-md-4"><strong>طالب علم کا نام:</strong> <span class="bg-white px-2 rounded">${student.stdName}</span></div>
                <div class="col-md-4"><strong>ولدیت:</strong> <span class="bg-white px-2 rounded">${student.fatherName}</span></div>
                <input type="hidden" name="stdSno" id="stdSno" value="${student.sno}">
            </div>
        `;
        $studentInfoDisplay.html(html);
    }

    function setupFields(dates) {
        $('#promotionDate').val(dates.promotionDate);
        $('#dateEnd').val(dates.dateEnd);
    }

    function renderSubjectsTable(subjects) {
        let html = '';
        subjects.forEach((sub, index) => {
            html += `
                <tr>
                    <td class="ps-3 fw-medium">${sub.subjectName}</td>
                    <td class="text-center bg-light fw-bold">${sub.totalMarks}</td>
                    <td>
                        <input type="number" 
                               class="form-control form-control-sm text-center obt-marks-input mx-auto" 
                               style="width: 100px;"
                               name="marks[${index}][obtMarks]" 
                               data-total="${sub.totalMarks}"
                               min="0"
                               max="${sub.totalMarks}"
                               value="0"
                               required>
                        <input type="hidden" name="marks[${index}][subjectsno]" value="${sub.sno}">
                    </td>
                </tr>
            `;
        });
        $subjectsTableBody.html(html);
    }

    // Save result
    $saveResultForm.on('submit', function (e) {
        e.preventDefault();

        // Basic validation
        let isValid = true;
        $('.obt-marks-input').each(function () {
            const val = parseFloat($(this).val());
            const total = parseFloat($(this).data('total'));
            if (isNaN(val) || val < 0 || val > total) {
                isValid = false;
                $(this).addClass('is-invalid');
            } else {
                $(this).removeClass('is-invalid');
            }
        });

        if (!isValid) {
            Swal.fire('غلطی', 'حاصل کردہ نمبرات درست نہیں ہیں (0 سے کل نمبرات کے درمیان ہونے چاہئیں)', 'error');
            return;
        }

        const formData = {
            stdSno: $('#stdSno').val(),
            darja: $('#darja').val(),
            resultTerm: $('#resultTerm').val(),
            promotionDate: $('#promotionDate').val(),
            dateEnd: $('#dateEnd').val(),
            edu_year_remarks: $('#edu_year_remarks').val(),
            marks: []
        };

        // Collect marks
        $('.obt-marks-input').each(function (index) {
            formData.marks.push({
                subjectsno: $(`input[name="marks[${index}][subjectsno]"]`).val(),
                obtMarks: $(this).val()
            });
        });

        $btnSave.prop('disabled', true).html('<span class="spinner-border spinner-border-sm me-2"></span>محفوظ ہو رہا ہے...');

        $.ajax({
            url: 'APIs/saveStudentResult.php',
            method: 'POST',
            data: JSON.stringify(formData),
            contentType: 'application/json',
            success: function (response) {
                $btnSave.prop('disabled', false).html('<i class="bi bi-save me-2"></i>محفوظ کریں');
                if (response.success) {
                    Swal.fire({
                        title: 'کامیابی',
                        text: response.message,
                        icon: 'success',
                        confirmButtonText: 'ٹھیک ہے',
                        customClass: {
                            confirmButton: 'btn btn-success'
                        }
                    });
                    // Don't reset everything, just maybe clear the form or allow another entry
                    // $saveResultForm[0].reset();
                } else {
                    Swal.fire('اطلاع', response.message, 'warning');
                }
            },
            error: function () {
                $btnSave.prop('disabled', false).html('<i class="bi bi-save me-2"></i>محفوظ کریں');
                Swal.fire('خرابی', 'محفوظ کرنے میں خرابی آئی', 'error');
            }
        });
    });

    function showAlert(message, type) {
        if (!message) {
            $formAlert.html('');
            return;
        }
        $formAlert.html(`<div class="alert alert-${type} alert-dismissible fade show" role="alert">
            ${message}
            <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
        </div>`);
    }

    // Validation for marks on change
    $(document).on('change', '.obt-marks-input', function () {
        let val = parseFloat($(this).val());
        let total = parseFloat($(this).data('total'));
        if (val > total) {
            $(this).val(total);
            Toast.fire({
                icon: 'warning',
                title: `حاصل کردہ نمبر ${total} سے زیادہ نہیں ہو سکتے`
            });
        } else if (val < 0 || isNaN(val)) {
            $(this).val(0);
        }
    });

    // Toast configuration
    const Toast = Swal.mixin({
        toast: true,
        position: 'top-end',
        showConfirmButton: false,
        timer: 3000,
        timerProgressBar: true
    });
});
