"""Transkriptten içerik haritası çıkarır (WSL'deki Qwen). Çıktı: icerik.json (parça başına JSON)."""
import json, re, urllib.request, os
K = os.path.dirname(os.path.abspath(__file__))
W = json.load(open(f"{K}/Eğitim_kelimeler.json"))
SAAT = lambda t: f"{int(t)//3600:02d}:{int(t)%3600//60:02d}:{int(t)%60:02d}"
MOLA = (73481, 74726)

def metin(a, b):
    s, son, spk = "", None, None
    for x in W:
        if a <= x["saat"] < b:
            kim = "HOCA" if x["konusmaci"] == "EĞİTMEN" else "KATILIMCI"
            if son is None or x["saat"] - son > 1.5 or kim != spk: s += f"\n[{SAAT(x['saat'])}] {kim}: "
            s += x["kelime"] + " "; son = x["bitis"]; spk = kim
    return s

ISTEM = """Aşağıda bir oyunculuk/diksiyon atölyesinin otomatik çıkarılmış transkriptinden bir parça var (Türkçe, konuşmadan yazıya; bazı kelimeler yanlış duyulmuş olabilir). Hoca Mehmet Bey; katılımcılar gençler.
{not_}
Bu parçayı oku ve SADECE şu JSON'u yaz:
{{"bolumler":[{{"bas":"SS:DD:ss","baslik":"kısa başlık","ozet":"hocanın anlattığı şey, 1-2 cümle"}}],
 "terimler":[{{"terim":"...","aciklama":"hocanın anlattığı anlamıyla kısa tanım","saat":"SS:DD:ss"}}],
 "uygulamalar":[{{"saat":"SS:DD:ss","kim":"isim ya da 'bir katılımcı'","ne":"oynanan/yapılan şey"}}],
 "kisiler_eserler":[{{"ad":"bahsedilen kişi/eser/kurum (doğru yazımıyla)","baglam":"kısa","saat":"SS:DD:ss"}}],
 "belirsiz":[{{"saat":"SS:DD:ss","metin":"transkriptteki ifade","soru":"neyin belirsiz olduğu: anlamsız/yanlış duyulmuş kelime, 'göreceksiniz/sonra anlatacağım' denip anlatılmayan şey, kimden bahsedildiği belli olmayan yer vb."}}]}}
Bölümler: konu değiştikçe yeni başlık (parça başına 1-4). Boş listeler serbest. Uydurma yapma; sadece metinde olanı yaz."""

def sor(parca, not_):
    istek = {"model": "bot-llm", "temperature": 0.2, "max_tokens": 3000, "chat_template_kwargs": {"enable_thinking": False},
             "messages": [{"role": "user", "content": ISTEM.format(not_=not_) + "\n---\n" + parca}]}
    r = urllib.request.urlopen(urllib.request.Request("http://127.0.0.1:47841/v1/chat/completions", json.dumps(istek).encode(),
                               {"Content-Type": "application/json"}), timeout=900)
    c = json.loads(r.read())["choices"][0]["message"]["content"]
    return json.loads(re.search(r"\{.*\}", c, re.S).group(0))

out = []
t = 70598
while t < 77870:
    u = min(t + 480, 77870)
    not_ = "BU PARÇA MOLA SIRASINDA (kamera kapalı, sadece hocanın mikrofonu kaydediyor; serbest sohbet)." if MOLA[0] <= t < MOLA[1] else ""
    try: j = sor(metin(t, u), not_)
    except Exception as e: j = {"hata": str(e)}
    out.append(dict(bas=SAAT(t), son=SAAT(u), mola=bool(not_), **j)); print(SAAT(t), flush=True)
    t = u
json.dump(out, open(f"{K}/icerik.json", "w"), ensure_ascii=False, indent=1); print("BİTTİ")
