from flask import jsonify, request from werkzeug.wrappers import Response import db import document_engine from core.flask_app import app @app.route("/document//theme/apply", methods=["POST"]) def document_theme_apply(slug: str) -> Response | tuple[Response, int]: """Applique un thème visuel au support, ou le RETIRE — voir document_engine/themes/. `mode` décide du sort du contenu ACTUEL : - "keep_content" (défaut) : seul le thème change, le contenu du support reste tel quel. - "template_content" : le contenu du support est intégralement remplacé par le contenu de démonstration du thème (voir document_engine.replace_document_content) — action destructive, dont la confirmation est à la charge du client (voir static/document/js/document-editor.js, aucune confirmation ici côté serveur : ce n'est pas son rôle). `theme_id` vide (retour utilisateur du 26/09/2026 : la modale propose une carte "Aucun modèle" pour "revenir à un document de base") retire le thème (`db.remove_document_theme`) et s'arrête là — jamais de contenu de démonstration à appliquer pour "aucun modèle", `mode` n'a alors aucun sens et est ignoré.""" payload = request.get_json(force=True) or {} theme_id = str(payload.get("theme_id", "")) if not theme_id: db.remove_document_theme(slug) return jsonify({"ok": True, "theme_id": ""}) theme = document_engine.get_document_theme_entry(theme_id) if theme is None: return jsonify({"error": "thème introuvable"}), 404 mode = payload.get("mode", "keep_content") if mode not in ("keep_content", "template_content"): return jsonify({"error": "mode invalide"}), 400 db.set_document_theme(slug, theme_id) if mode == "template_content": document_engine.replace_document_content(slug, theme["seed_pages"]) return jsonify({"ok": True, "theme_id": theme_id})