"""Submit clip.wav to pyannote.ai precision-2 with overlap-aware settings."""
import json, time
from pathlib import Path
import requests

API_KEY = "sk_6dbfc3ab62f84962b1abb1c5c10ca82e"
BASE = "https://api.pyannote.ai/v1"
H = {"Authorization": f"Bearer {API_KEY}"}

HERE = Path(__file__).parent
AUDIO = HERE / "clip.wav"
OUT = HERE / "diarization.json"
KEY = "media://yt-NeccX-clip-2m35s-46m08s.wav"

print("[1/4] presigned upload URL")
r = requests.post(f"{BASE}/media/input", headers=H, json={"url": KEY}); r.raise_for_status()
upload_url = r.json()["url"]

print(f"[2/4] uploading {AUDIO.stat().st_size/1e6:.1f} MB")
with open(AUDIO, "rb") as f:
    requests.put(upload_url, data=f).raise_for_status()

print("[3/4] submitting precision-2 (exclusive=false)")
body = {
    "url": KEY,
    "model": "precision-2",
    "exclusive": False,
    "confidence": True,
    "turnLevelConfidence": True,
}
r = requests.post(f"{BASE}/diarize", headers=H, json=body); r.raise_for_status()
job_id = r.json().get("jobId") or r.json().get("id")
print(f"      jobId={job_id}")

print("[4/4] polling")
start = time.time()
while True:
    r = requests.get(f"{BASE}/jobs/{job_id}", headers=H); r.raise_for_status()
    j = r.json()
    s = j.get("status", "?")
    print(f"      [{int(time.time()-start):3d}s] {s}")
    if s in ("succeeded", "failed", "canceled"):
        break
    time.sleep(5)

if s != "succeeded":
    print(json.dumps(j, indent=2)); raise SystemExit(1)

OUT.write_text(json.dumps(j, indent=2))
print(f"\nsaved -> {OUT}")

out = j.get("output") or {}
dia = out.get("diarization") or []
ex = out.get("exclusiveDiarization") or []
print(f"  diarization turns: {len(dia)}")
print(f"  exclusiveDiarization turns: {len(ex)}")
from collections import defaultdict
tot = defaultdict(float)
for t in dia:
    tot[t["speaker"]] += t["end"] - t["start"]
for k, v in sorted(tot.items(), key=lambda x: -x[1]):
    print(f"    {k}: {v:.1f}s ({v/60:.1f} min)")
