// API client — english platform const API = (() => { const BASE = '/api'; function getToken() { return localStorage.getItem('ep_token'); } function getUser() { try { return JSON.parse(localStorage.getItem('ep_user')); } catch { return null; } } function setAuth(token, user) { localStorage.setItem('ep_token', token); localStorage.setItem('ep_user', JSON.stringify(user)); } function clearAuth() { localStorage.removeItem('ep_token'); localStorage.removeItem('ep_user'); } async function req(method, path, body, isFormData = false) { const headers = { Authorization: `Bearer ${getToken()}` }; if (!isFormData) headers['Content-Type'] = 'application/json'; const opts = { method, headers }; if (body) opts.body = isFormData ? body : JSON.stringify(body); const res = await fetch(BASE + path, opts); const data = await res.json().catch(() => ({})); if (!res.ok) throw new Error(data.error || `Erro ${res.status}`); return data; } return { getToken, getUser, setAuth, clearAuth, isLoggedIn: () => !!getToken(), isTeacher: () => { const u = getUser(); return u && (u.role === 'teacher' || u.role === 'admin'); }, // Auth login: (email, password) => req('POST', '/auth/login', { email, password }), forgotPassword: (email) => req('POST', '/auth/forgot-password', { email }), resetPassword: (token, password) => req('POST', '/auth/reset-password', { token, password }), changePassword: (currentPassword, newPassword) => req('POST', '/auth/change-password', { currentPassword, newPassword }), // Users me: () => req('GET', '/users/me'), getStudents: () => req('GET', '/users/students'), createStudent: (data) => req('POST', '/users/create', data), toggleStudent: (id) => req('PUT', `/users/${id}/toggle`), resetStudentPassword: (id, password) => req('PUT', `/users/${id}/reset-password`, { password }), getNotifications: () => req('GET', '/users/notifications'), getNotifCount: () => req('GET', '/users/notifications/count'), markNotifsRead: () => req('PUT', '/users/notifications/read'), // Homework myHomework: () => req('GET', '/homework/my'), submitHomework: (data) => req('POST', '/homework/submit', data), getSubmissions: (params = {}) => { const q = new URLSearchParams(params).toString(); return req('GET', `/homework/submissions${q ? '?' + q : ''}`); }, getSubmission: (id) => req('GET', `/homework/submission/${id}`), reviewHomework: (id, grade, feedback) => req('POST', `/homework/review/${id}`, { grade, feedback }), assignHomework: (data) => req('POST', '/homework/assign', data), // Recordings myRecordings: () => req('GET', '/recordings/my'), getAllRecordings: (params = {}) => { const q = new URLSearchParams(params).toString(); return req('GET', `/recordings/all${q ? '?' + q : ''}`); }, reviewRecording: (id, formData) => req('POST', `/recordings/review/${id}`, formData, true), audioUrl: (audioPath) => `/api/recordings/audio/${audioPath}`, requestRerecord: (id, fd) => req('POST', `/recordings/request-rerecord/${id}`, fd, true), submitRecording: (formData) => req('POST', '/recordings/submit', formData, true), deleteRecording: (id) => req('DELETE', `/recordings/delete/${id}`), deleteSubmission: (id) => req('DELETE', `/homework/submission/${id}`), // Materials getMaterials: () => req('GET', '/materials'), createMaterial: (data) => req('POST', '/materials', data), updateMaterial: (id, data) => req('PUT', `/materials/${id}`, data), deleteMaterial: (id) => req('DELETE', `/materials/${id}`), sendMaterial: (id, student_ids) => req('POST', `/materials/${id}/send`, { student_ids }), getMyMaterials: () => req('GET', '/materials/my'), readMaterial: (id) => req('POST', `/materials/${id}/read`), getMaterialDoubts: (id, student_id) => req('GET', `/materials/${id}/doubts${student_id ? '?student_id='+student_id : ''}`), sendMaterialDoubt: (id, data) => req('POST', `/materials/${id}/doubts`, data), getMaterialDoubtStudents: (id) => req('GET', `/materials/${id}/doubt-students`), getMaterialStudents: () => req('GET', '/materials/students/list'), uploadMaterialImage: (formData) => req('POST', '/materials/upload-image', formData, true), }; })(); window.API = API;