from flask import jsonify, redirect, render_template, request, url_for from werkzeug.wrappers import Response import db from core.flask_app import app @app.route("/game//variables/new", methods=["POST"]) def create_global_var(slug: str) -> Response: """Depuis l'onglet "Variables" de l'éditeur de scène (screen_edit.html) — idempotent par nom (voir db.create_global_variable), donc sans risque en cas de double soumission. Réponse AJAX (voir static/js/scenes/global-variables.js) : renvoie le HTML de la LIGNE créée (templates/_global_variable_row.html, partagé avec le rendu initial de la page — jamais dupliqué), que le JS insère sans recharger.""" name = (request.form.get("name") or "").strip() var_type = request.form.get("type") or "texte" default_value = request.form.get("default_value") or "" screen_id = request.form.get("screen_id", type=int) # État par joueur (Phase 1) : coché par défaut (une case DÉCOCHÉE # explicitement rend la variable partagée par tous les joueurs, voir # db/global_vars/create_global_variable.py) — absent du formulaire # (jeux/pages qui n'ont pas encore ce champ) => reste per_player. per_player = request.form.get("per_player", "1") == "1" if name: db.create_global_variable(slug, name, var_type, default_value, per_player=per_player) if request.headers.get("X-Requested-With") == "fetch": row_html = "" if name: variable = db.get_global_variable(slug, name) row_html = render_template( "_global_variable_row.html", v=variable, global_variable_types=db.GLOBAL_VARIABLE_TYPES, ) return jsonify({"ok": True, "row_html": row_html}) if screen_id: return redirect(url_for("screen_edit", slug=slug, screen_id=screen_id, tab="variables")) return redirect(url_for("game_dashboard", slug=slug))