async function saveData() {
// লোডার সেট করা
let cellId = (editingRowIndex === -1 || isInsertMode) ? 'q-cell-new' : `q-cell-${editingRowIndex}`;
document.getElementById(cellId).innerHTML = '';
let action = isInsertMode ? 'insert_before' : (editingRowIndex > -1 ? 'update' : 'insert');
let params = new URLSearchParams();
// বিদ্যমান প্যারামিটারগুলো রাখা হয়েছে
params.append('secretKey', SYSTEM_SECRET_KEY);
params.append('sheetName', document.getElementById('classSelect').value);
params.append('action', action);
params.append('rowIndex', editingRowIndex);
params.append('Title', document.getElementById('title').value);
params.append('QuestionNumber', document.getElementById('qNumber').value);
params.append('BookPageNumber', document.getElementById('pageNumber').value);
params.append('VideoLink', document.getElementById('videoLink').value);
params.append('StartTime', document.getElementById('startTime').value);
params.append('EndTime', document.getElementById('endTime').value);
// --- নতুন পরিবর্তন এখানে ---
// ১. BookPageImage (যদি আপনার ইনপুট থাকে তবে আইডি দিন, না থাকলে ব্ল্যাঙ্ক রাখলাম)
params.append('BookPageImage', document.getElementById('pageImage') ? document.getElementById('pageImage').value : '');
// ২. Alphabet ড্রপডাউন থেকে মান সংগ্রহ (H কলামের জন্য)
params.append('ALPHABET', document.getElementById('alphabetSelect').value);
// ৩. Numeric ID ড্রপডাউন থেকে মান সংগ্রহ (I কলামের জন্য)
params.append('NUMERIC-ID', document.getElementById('numericIdSelect').value);
// ৪. Status (J কলামের জন্য) - আপনি 'locked' রাখতে চেয়েছেন
params.append('Status', 'locked');
// -------------------------
// সার্ভারে ডেটা পাঠানো
await fetch(WEB_APP_URL, { method: 'POST', mode: 'no-cors', body: params });
// স্টেট আপডেট এবং রিফ্রেশ লজিক
let prevIdx = editingRowIndex;
isInsertMode = false;
editingRowIndex = -1;
await new Promise(r => setTimeout(r, 1500));
await fetchSheetData(document.getElementById('classSelect').value);
lastSavedIdx = (action === 'insert') ? sheetData.length - 1 : prevIdx;
renderTable();
}