"""Keep the data inside ../widget.html equal to the data in sim.py and budget.py.

    python3 embed_widget.py          rewrite the data block in widget.html
    python3 embed_widget.py --check  exit 1 if widget.html differs (test_widget.py runs the same check)
"""
import json
import re
import sys
from pathlib import Path

import sim
from budget import DAY, MAX_REPLY, PRICE_IN, PRICE_OUT

WIDGET = Path(__file__).resolve().parent.parent / "widget.html"
CONFIG_BLOCK = re.compile(r'(<script type="application/json" id="qb-config">)(.*?)(</script>)', re.S)


def config():
    return {"users": sim.USERS, "day": DAY, "seed": sim.SEED, "rpm": sim.RPM, "budget": sim.BUDGET, "start": sim.START_RULE,
            "priceIn": PRICE_IN, "priceOut": PRICE_OUT, "maxReply": MAX_REPLY,
            "heavyFrom": sim.HEAVY_FROM, "heavyTo": sim.HEAVY_TO, "heavyIn": sim.HEAVY_IN, "heavyOut": sim.HEAVY_OUT, "heavyGap": sim.HEAVY_GAP,
            "ordinaryIn": sim.ORDINARY_IN, "ordinaryOut": sim.ORDINARY_OUT, "sessions": sim.SESSIONS, "sessionCalls": sim.SESSION_CALLS,
            "callGap": sim.CALL_GAP, "longestSession": sim.LONGEST_SESSION, "rules": [{"id": i, "name": name} for i, name in sim.RULES]}


def embed(html):
    """html with the config block rewritten from sim.py."""
    block = "{\n" + ",\n".join(f" {json.dumps(key)}: {json.dumps(value)}" for key, value in config().items()) + "\n}"
    return CONFIG_BLOCK.sub(lambda m: m.group(1) + "\n" + block + "\n" + m.group(3), html, count=1)


if __name__ == "__main__":
    current = WIDGET.read_text(encoding="utf-8")
    updated = embed(current)
    if "--check" in sys.argv:
        sys.exit(0 if updated == current else 1)
    WIDGET.write_text(updated, encoding="utf-8")
    print("widget.html data block now matches sim.py")
