from flask import Blueprint, render_template, request, redirect, url_for from ..db import query_one, execute, get_all_sessions from ..config import SIM_CONFIGS_DIR, load_sim_config, save_sim_config, load_all_modes bp = Blueprint("params", __name__) @bp.route("/params") def params(): all_sessions = get_all_sessions() sid = int(request.args.get("sid", all_sessions[-1]["id"] if all_sessions else 1)) session = query_one("SELECT * FROM sessions WHERE id = %s", (sid,)) cfg = load_sim_config(sid) modes = load_all_modes() flash_msg = request.args.get("msg") flash_ok = request.args.get("ok", "1") == "1" return render_template("params.html", tab="params", current_sid=sid, all_sessions=all_sessions, session=session, cfg=cfg, modes=modes, sim_configs_dir=SIM_CONFIGS_DIR, flash_msg=flash_msg, flash_ok=flash_ok, ) @bp.route("/params/save", methods=["POST"]) def params_save(): sid = int(request.args.get("sid", 1)) cfg = load_sim_config(sid) if cfg is None: return redirect(url_for("params.params", sid=sid, msg=f"Fichier sim_{sid:03d}.json introuvable dans {SIM_CONFIGS_DIR}", ok=0)) f = request.form cfg["name"] = f.get("name", cfg.get("name", "")) cfg["mode"] = f.get("mode", cfg.get("mode", "pacifiste")) cfg.setdefault("tick", {})["tick_sleep_sec"] = int(f.get("tick_sleep_sec", 60)) cfg.setdefault("survival", {}).update({ "drain_speed": float(f.get("survival_drain_speed", 1.0)), "fatigue_hp_per_2pts": int(f.get("survival_fatigue_hp", 2)), "enabled": "survival_enabled" in f, }) cfg.setdefault("encounter", {}).update({ "global_rate_multiplier": float(f.get("encounter_rate", 1.0)), "enabled": "encounter_enabled" in f, }) cfg.setdefault("economy", {})["caps_global_multiplier"] = float(f.get("caps_multiplier", 1.0)) try: save_sim_config(sid, cfg) execute("UPDATE sessions SET mode=%s WHERE id=%s", (cfg["mode"], sid)) msg = f"Config sim_{sid:03d}.json sauvegardée. Mode DB mis à jour → {cfg['mode']}." ok = 1 except Exception as e: msg = f"Erreur: {e}" ok = 0 return redirect(url_for("params.params", sid=sid, msg=msg, ok=ok)) @bp.route("/params/setstatus", methods=["POST"]) def params_setstatus(): sid = int(request.args.get("sid", 1)) status = request.form.get("status", "paused") try: execute("UPDATE sessions SET status=%s WHERE id=%s", (status, sid)) msg = f"Session {sid} → status '{status}'." ok = 1 except Exception as e: msg = f"Erreur: {e}" ok = 0 return redirect(url_for("params.params", sid=sid, msg=msg, ok=ok)) @bp.route("/params/resetday", methods=["POST"]) def params_resetday(): sid = int(request.args.get("sid", 1)) day = int(request.form.get("day", 1)) tick = int(request.form.get("tick", 0)) try: execute("UPDATE sessions SET current_day=%s, current_tick=%s WHERE id=%s", (day, tick, sid)) msg = f"Session {sid} remise à J{day} T{tick}h." ok = 1 except Exception as e: msg = f"Erreur: {e}" ok = 0 return redirect(url_for("params.params", sid=sid, msg=msg, ok=ok))