import db from .compute_operation import compute_new_value def apply_variable_action(slug, action, player_id=db.PLAYER_SHARED): """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 plutôt qu'au champ d'une ligne d'objet. `player_id` (état par joueur, Phase 1) : pour une variable per_player, lit/écrit la valeur propre à CE joueur (voir db/global_vars/resolve_player_key.py).""" 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, player_id) 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, player_id)