async function handleUpload(e) { e.preventDefault(); const fileInput = document.getElementById('res-file'); const file = fileInput.files[0]; if (file.type !== "application/pdf" || file.size > 2097152) { ApexApp.showToast("File must be a PDF and under 2MB!", true); return; } const filePath = `res-${Date.now()}-${file.name.replace(/\s+/g, '_')}`; const { error: uploadError } = await supabase.storage .from('study-resources') .upload(filePath, file); if (uploadError) { ApexApp.showToast(uploadError.message, true); return; } const { data: { publicUrl } } = supabase.storage .from('study-resources') .getPublicUrl(filePath); // Insert resource metadata record const { error: dbError } = await supabase.from('resources').insert([{ teacher_id: user.id, title: document.getElementById('res-title').value, category: document.getElementById('res-category').value, file_url: publicUrl, file_size_mb: Number((file.size / (1024 * 1024)).toFixed(2)) }]); if (dbError) { ApexApp.showToast(dbError.message, true); return; } ApexApp.showToast("Study material uploaded!"); closeUploadModal(); renderResources(); }