"""Seed isolated synthetic usage and run the real-app two-commit proof.
Usage: python3 reproduce.py CHECKOUT SCRATCH_DIRECTORY
Copy usage-token-rounding.e2e.ts into CHECKOUT/scripts/scenarios first.
"""
import datetime
import json
import os
from pathlib import Path
import subprocess
import sys

checkout = Path(sys.argv[1]).resolve()
root = Path(sys.argv[2]).resolve() / datetime.datetime.now().strftime("run-%Y%m%d-%H%M%S")
fixture = root / "fixture"
transcript = fixture / "claude/projects/usage-demo/session.jsonl"
transcript.parent.mkdir(parents=True, exist_ok=True)
transcript.write_text(json.dumps({
    "type": "assistant", "timestamp": datetime.datetime.now(datetime.timezone.utc).isoformat(),
    "requestId": "usage-request", "sessionId": "usage-session",
    "message": {"id": "usage-message", "model": "claude", "usage": {
        "input_tokens": 999000, "output_tokens": 999,
        "cache_read_input_tokens": 0, "cache_creation_input_tokens": 0
    }}
}) + "\n")
paths = [checkout / "scripts/scenarios/start-app.ts", checkout / "scripts/e2e.config.ts"]
originals = [p.read_text() for p in paths]
try:
    paths[0].write_text(originals[0].replace(
        "...hostEnvironment,\n    PATH:",
        "...hostEnvironment,\n    HOME: hostEnvironment.T3_USAGE_FIXTURE_HOME ?? hostEnvironment.HOME,\n    PATH:"
    ))
    paths[1].write_text(originals[1].replace(
        "executable: resolved.node,",
        'executable: resolved.node,\n          inheritEnv: ["T3_USAGE_FIXTURE_HOME", "CLAUDE_CONFIG_DIR", "T3CODE_DEV_SEED"],'
    ))
    env = dict(os.environ, T3CODE_DEV_SEED="0", T3_USAGE_FIXTURE_HOME=str(fixture),
               CLAUDE_CONFIG_DIR=str(fixture / "claude"))
    head = "6c8576aa6218fe4075805b0a4b87eb2180ed8e23"
    base = subprocess.check_output(["git", "merge-base", "origin/main", head], cwd=checkout, text=True).strip()
    result = subprocess.run(["vp", "run", "scenarios:prove", "scripts/scenarios/usage-token-rounding.e2e.ts",
                             "--base", base, "--head", head], cwd=checkout, env=env)
    sys.exit(result.returncode)
finally:
    for path, original in zip(paths, originals):
        path.write_text(original)
