import db from .compute_operation import compute_new_value def apply_variable_action(slug, action): """Exécute au moment du clic (mode jouable) une action "modifier_variable" — même logique/vocabulaire d'opérations que apply_data_action.py (DATA_OPERATIONS), appliqué à une variable globale (une seule valeur pour tout le jeu) plutôt qu'au champ d'une ligne d'objet.""" var_name = action.get("target_variable") operation = action.get("data_operation") raw_value = action.get("data_value") if not (var_name and operation): return False variable = db.get_global_variable(slug, var_name) if not variable: return False var_type = variable["type"] current = variable.get("value") if var_type in ("nombre_entier", "nombre_decimal"): try: current = float(current) if current not in (None, "") else 0 except (TypeError, ValueError): current = 0 elif var_type == "booleen": current = 1 if str(current).strip().lower() in ("1", "true", "vrai") else 0 try: new_value = compute_new_value(operation, current, raw_value, var_type == "nombre_decimal") except ValueError: return False return db.update_global_variable_value(slug, var_name, new_value)