"""Reels/Shorts adaylarını yerel LLM'e (WSL, llama-server, Qwen) seçtirir. WSL'de çalışır.
Girdi: Eğitim_kelimeler.json (aynı klasörde). Çıktı: reels.json"""
import json, urllib.request, os, re
K = os.path.dirname(os.path.abspath(__file__))
W = json.load(open(f"{K}/Eğitim_kelimeler.json"))
ARALIK = [(71222, 73481), (74726, 77692)]          # kurguya giren kısımlar (gerçek saat)
SAAT = lambda t: f"{int(t)//3600:02d}:{int(t)%3600//60:02d}:{int(t)%60:02d}"


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 "ÖĞRENCİ"
            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 = """Bir oyunculuk/diksiyon atölyesinin transkript parçası aşağıda (saatler gerçek saat). Bu kayıttan Instagram Reels / YouTube Shorts için kısa videolar kesilecek.
Bu parçadan tek başına izlenince anlaşılan, ilgi çekici, 20–90 saniyelik anları seç: güçlü bir fikir/tanım, komik an, öğrenci doğaçlaması, akılda kalan bir cümle, merak uyandıran bir hikâye.
Her an kendi içinde başı ve sonu olan bir bütün olmalı (cümlenin ortasında başlamasın/bitmesin). Zayıfsa seçme; bir parçada 0–3 an yeterli.
SADECE şu JSON'u yaz: {"anlar":[{"bas":"SS:DD:ss","son":"SS:DD:ss","baslik":"kısa çarpıcı başlık","neden":"bir cümle","kanca":"videonun ilk 3 sn'de söylenen cümle","puan":1-10}]}
"""


def sor(parca):
    istek = {"model": "bot-llm", "temperature": 0.3, "max_tokens": 3000, "chat_template_kwargs": {"enable_thinking": False},
             "messages": [{"role": "user", "content": ISTEM + "\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"]
    c = re.sub(r"<think>.*?</think>", "", c, flags=re.S)
    m = re.search(r"\{.*\}", c, re.S)
    if not m:
        print("  JSON yok:", c[:200].replace("\n", " "), flush=True); return []
    return json.loads(m.group(0))["anlar"]


anlar = []
for a, b in ARALIK:
    t = a
    while t < b:
        u = min(t + 480, b)
        try:
            yeni = sor(metin(t - 30 if t > a else t, u + 30 if u < b else u))
        except Exception as e:
            print("hata", SAAT(t), e, flush=True); yeni = []
        anlar += yeni
        print(SAAT(t), len(yeni), "an", flush=True)
        t = u
anlar.sort(key=lambda x: -int(x.get("puan", 0)))
json.dump(anlar, open(f"{K}/reels.json", "w"), ensure_ascii=False, indent=1)
print("BİTTİ", len(anlar))
