from ..connection import connect from .coerce_structured_value import coerce_structured_value from .ensure_global_vars_schema import PLAYER_SHARED, ensure_global_vars_schema def create_global_variable( slug: str, name: str, var_type: str = "texte", default_value: str = "", per_player: bool = True ) -> int | None: """Crée la ligne "modèle" d'une variable globale (toujours player_id=PLAYER_SHARED, quel que soit per_player — voir ensure_global_vars_schema.py) si son nom n'existe pas déjà ; si elle existe déjà, ne touche à rien et renvoie simplement son id existant, pour que "créer" depuis le sélecteur de condition de visibilité (voir screen_edit.html) reste sans risque même en cas de double clic/ soumission. per_player (réglé une fois, à la création, coché par défaut) : True = chaque joueur aura sa propre valeur (une ligne créée paresseusement à sa première écriture, voir update_global_variable_value.py) ; False = valeur unique partagée par tous les joueurs (ex. un compteur de visiteurs global).""" name = (name or "").strip() if not name: return None default_value = coerce_structured_value(var_type, default_value) ensure_global_vars_schema(slug) conn = connect(slug) existing = conn.execute( "SELECT id FROM _global_variables WHERE name = ? AND player_id = ?", (name, PLAYER_SHARED) ).fetchone() if existing: conn.close() return int(existing["id"]) conn.execute( "INSERT INTO _global_variables (name, type, value, player_id, per_player) VALUES (?, ?, ?, ?, ?)", (name, var_type, default_value, PLAYER_SHARED, 1 if per_player else 0), ) new_id = int(conn.execute("SELECT last_insert_rowid() AS id").fetchone()["id"]) conn.commit() conn.close() return new_id