query("SELECT * FROM actividades ORDER BY fecha ASC, hora ASC"); echo json_encode(['success' => true, 'data' => $stmt->fetchAll()]); break; case 'POST': $input = json_decode(file_get_contents('php://input'), true); if (empty($input['titulo']) || empty($input['fecha']) || empty($input['hora'])) { http_response_code(400); echo json_encode(['success' => false, 'message' => 'Título, fecha y hora son obligatorios']); exit(); } $stmt = $pdo->prepare(" INSERT INTO actividades (titulo, descripcion, tipo, fecha, hora, duracion_min, responsable, color) VALUES (:titulo, :desc, :tipo, :fecha, :hora, :dur, :resp, :color) "); $stmt->execute([ ':titulo' => $input['titulo'], ':desc' => $input['descripcion'] ?? null, ':tipo' => $input['tipo'] ?? 'Personalizado', ':fecha' => $input['fecha'], ':hora' => $input['hora'], ':dur' => $input['duracion_min'] ?? 60, ':resp' => $input['responsable'] ?? null, ':color' => $input['color'] ?? '#e17055' ]); echo json_encode(['success' => true, 'message' => 'Actividad programada correctamente']); break; case 'PUT': // Marcar como completada/pendiente $input = json_decode(file_get_contents('php://input'), true); $id = (int)$input['id']; $completada = $input['completada'] ? 1 : 0; $stmt = $pdo->prepare("UPDATE actividades SET completada = :completada WHERE id = :id"); $stmt->execute([':completada' => $completada, ':id' => $id]); echo json_encode(['success' => true, 'message' => 'Estado de actividad actualizado']); break; case 'DELETE': $id = isset($_GET['id']) ? (int)$_GET['id'] : 0; $stmt = $pdo->prepare("DELETE FROM actividades WHERE id = ?"); $stmt->execute([$id]); echo json_encode(['success' => true, 'message' => 'Actividad eliminada']); break; default: http_response_code(405); echo json_encode(['success' => false, 'message' => 'Método no permitido']); break; } } catch (PDOException $e) { http_response_code(500); echo json_encode(['success' => false, 'message' => 'Error en el servidor', 'error' => $e->getMessage()]); } ?>