"""記事の数字を data.json から出し直す: python3 summarize.py"""
import json
from collections import Counter
from datetime import datetime, timedelta, timezone
from pathlib import Path
from statistics import median

JST = timezone(timedelta(hours=9))
d = json.loads((Path(__file__).resolve().parent / "data.json").read_text())


def day(s):
    return datetime.fromisoformat(s.replace("Z", "+00:00")).astimezone(JST).strftime("%m-%d")


def pct(a, b):
    return f"{a / b * 100:.0f}%"


S, M, T = d["sessions"], d["human_messages"], d["title_decisions"]

print("## Session（誰が起動したか）")
by = Counter(s["started_by"] for s in S)
tools = Counter()
for s in S:
    tools[s["started_by"]] += s["tool_calls"]
for k in ("human", "agent", "workflow"):
    print(f"{k:9} Session {by[k]:3} ({pct(by[k], len(S))})  ツール呼び出し {tools[k]:5} ({pct(tools[k], sum(tools.values()))})")
print(f"合計      Session {len(S)}  ツール呼び出し {sum(tools.values())}")

print("\n## 人の発言")
print(f"件数 {len(M)}  合計 {sum(m['chars'] for m in M)}字  中央値 {median(m['chars'] for m in M)}字  50字未満 {sum(m['chars'] < 50 for m in M)}件")
for label, n in Counter(m["label"] for m in M).most_common():
    print(f"  {label:6} {n:2}件 {sum(m['chars'] for m in M if m['label'] == label):5}字")

print("\n## 日別（日本時間）")
days = sorted({day(m["at"]) for m in M})
for x in days:
    labels = Counter(m["label"] for m in M if day(m["at"]) == x)
    sess = Counter(s["started_by"] for s in S if day(s["started_at"]) == x)
    arts = d["articles_added_by_day_jst"].get("2026-" + x, 0)
    print(f"{x} 発言 {sum(labels.values()):2} {dict(labels)}  Session {dict(sess)}  記事 {arts}")

print("\n## タイトルの判断")
keys = ("proposed", "accepted_as_is", "rewritten", "rejected", "sent_back")
tot = {k: sum(t[k] for t in T) for k in keys}
print(tot, f"そのまま採用 {pct(tot['accepted_as_is'], tot['proposed'])}")
waits = [t["wait_minutes"] for t in T]
print(f"回答までの待ち 合計 {sum(waits):.0f}分  最長 {max(waits):.0f}分  最短 {min(waits):.0f}分  回答の合計 {sum(t['answer_chars'] for t in T)}字")

p = d["weekly_pr"]
f = lambda s: datetime.fromisoformat(s.replace("Z", "+00:00"))
print(f"\n## 週次PR #{p['number']}: {p['new_articles']}本 {p['changed_files']}ファイル 作成からマージまで {(f(p['merged_at']) - f(p['created_at'])).total_seconds() / 60:.0f}分 人のレビュー記録 {p['human_reviews']}件")
