import json, os, random, sys, time, datetime, uuid

root = sys.argv[1]
files = int(sys.argv[2])
target_mb = float(sys.argv[3])
random.seed(7)
now = datetime.datetime.now(datetime.timezone.utc)
per_file = int(target_mb * 1024 * 1024 / files)
filler = "".join(random.choice("abcdefghijklmnopqrstuvwxyz \n{}\"") for _ in range(20000))
for i in range(files):
    day = now - datetime.timedelta(days=random.randint(0, 28), hours=random.randint(0, 20))
    d = os.path.join(root, "sessions", day.strftime("%Y"), day.strftime("%m"), day.strftime("%d"))
    os.makedirs(d, exist_ok=True)
    sid = str(uuid.UUID(int=random.getrandbits(128)))
    path = os.path.join(d, f"rollout-{day.strftime('%Y-%m-%dT%H-%M-%S')}-{sid}.jsonl")
    ts = day.strftime("%Y-%m-%dT%H:%M:%S.000Z")
    written = 0
    with open(path, "w") as f:
        def w(obj):
            global written
            s = json.dumps(obj) + "\n"
            f.write(s)
            written += len(s)
        w({"type": "session_meta", "timestamp": ts, "payload": {"type": "session_meta", "id": sid}})
        while written < per_file:
            w({"type": "turn_context", "timestamp": ts, "payload": {"type": "turn_context", "model": "gpt-5.6-sol"}})
            for _ in range(random.randint(3, 8)):
                n = random.randint(200, 6000)
                w({"type": "response_item", "timestamp": ts, "payload": {"type": "function_call_output", "call_id": "c", "output": filler[:n]}})
            w({"type": "event_msg", "timestamp": ts, "payload": {"type": "token_count", "info": {"last_token_usage": {"input_tokens": 1200, "cached_input_tokens": 800, "cache_write_input_tokens": 0, "output_tokens": 300, "reasoning_output_tokens": 50}}}})
    t = day.timestamp()
    os.utime(path, (t, t))
print("done")
