'No autenticado']); exit; } $method = $_SERVER['REQUEST_METHOD']; $profesorId = $_SESSION['profesor']['id'] ?? null; switch ($method) { case 'GET': try { $query = " SELECT c.*, COUNT(ac.id) AS alumnos_count, u.nombre AS profesor_nombre FROM cursos c LEFT JOIN alumnos_cursos ac ON c.id = ac.curso_id LEFT JOIN usuarios u ON c.profesor_id = u.id "; $params = []; if (isset($_GET['profesor_id'])) { $query .= " WHERE c.profesor_id = ?"; $params[] = $_GET['profesor_id']; } $query .= " GROUP BY c.id ORDER BY c.estado, c.nombre"; $stmt = $pdo->prepare($query); $stmt->execute($params); echo json_encode($stmt->fetchAll()); } catch (PDOException $e) { http_response_code(500); echo json_encode(['error' => 'Error al cargar cursos: ' . $e->getMessage()]); } break; case 'POST': $data = json_decode(file_get_contents('php://input'), true); try { $stmt = $pdo->prepare(" INSERT INTO cursos (nombre, descripcion, tipo, estado, profesor_id) VALUES (?, ?, ?, 'activo', ?) "); $stmt->execute([ $data['nombre'], $data['descripcion'] ?? null, $data['tipo'], $profesorId ]); echo json_encode(['success' => true, 'id' => $pdo->lastInsertId()]); } catch (PDOException $e) { http_response_code(500); echo json_encode(['error' => 'Error al crear curso: ' . $e->getMessage()]); } break; case 'DELETE': $id = $_GET['id'] ?? null; if (!$id) { http_response_code(400); echo json_encode(['error' => 'ID de curso no proporcionado']); exit; } try { // Verificar que el curso pertenece al profesor if ($profesorId) { $stmt = $pdo->prepare("SELECT id FROM cursos WHERE id = ? AND profesor_id = ?"); $stmt->execute([$id, $profesorId]); if (!$stmt->fetch()) { http_response_code(403); echo json_encode(['error' => 'No autorizado']); exit; } } $stmt = $pdo->prepare("DELETE FROM cursos WHERE id = ?"); $stmt->execute([$id]); echo json_encode(['success' => true]); } catch (PDOException $e) { http_response_code(500); echo json_encode(['error' => 'Error al eliminar curso: ' . $e->getMessage()]); } break; default: http_response_code(405); echo json_encode(['error' => 'Método no permitido']); } ?>