#!/usr/bin/env python3
"""Draw the seeded coding samples from the mined message list (read-only).

Sample A: 360 messages drawn uniformly at random (seed 20261102) from the
          messages that matched the intervention pre-filter.
Sample B: 80 messages drawn at random (same seed) from messages that did NOT
          match the pre-filter, to estimate what the pre-filter missed.
Writes data/sample.csv (msg_id, stratum). Message text is never written.
Also infers a session-level project for messages whose own hint is unknown
(majority known hint within the same session), written to
data/session_projects.csv.
"""
import csv, json, random, sys, collections, os
src, outdir = sys.argv[1], sys.argv[2]
rows = [json.loads(l) for l in open(src)]
by_sess = collections.defaultdict(collections.Counter)
for r in rows:
    if r["project_hint"] != "unknown":
        by_sess[r["session"]][r["project_hint"]] += 1
sess_proj = {s: c.most_common(1)[0][0] for s, c in by_sess.items()}
rng = random.Random(20261102)
pre = [r["msg_id"] for r in rows if r["prefilter"]]
non = [r["msg_id"] for r in rows if not r["prefilter"]]
A = sorted(rng.sample(pre, 360)); B = sorted(rng.sample(non, 80))
with open(os.path.join(outdir, "sample.csv"), "w", newline="") as f:
    w = csv.writer(f); w.writerow(["msg_id", "stratum"])
    for m in A: w.writerow([m, "A_prefilter"])
    for m in B: w.writerow([m, "B_nonprefilter"])
with open(os.path.join(outdir, "session_projects.csv"), "w", newline="") as f:
    w = csv.writer(f); w.writerow(["session_sha256_8", "inferred_project", "n_msgs"])
    import hashlib
    cnt = collections.Counter(r["session"] for r in rows)
    for s in sorted(cnt):
        w.writerow([hashlib.sha256(s.encode()).hexdigest()[:8], sess_proj.get(s, "unknown"), cnt[s]])
print(len(pre), len(non), len(A), len(B))
