"""Build the small, human-labelled route holdout set.

These utterances are not consumed by gen_route_data.py and must never be added
to route_train.jsonl. Labels follow the daemon's current JSON-array contract.
"""
import json
from pathlib import Path

from gen_route_data import ROUTE_SYSTEM, valid_actions

OUT = Path(__file__).resolve().parent / "data" / "route_eval.jsonl"
CASES = [
    ("напомни завтра позвонить врачу", [{"intent":"reminder","text":"позвонить врачу"}]),
    ("запиши купить новые батарейки", [{"intent":"note","text":"купить новые батарейки"}]),
    ("я только что полил цветы", [{"intent":"fact","key":"flowers","value":"полил"}]),
    ("что такое обратный прокси", [{"intent":"query","text":"что такое обратный прокси"}]),
    ("перезапусти медиасервер", [{"intent":"act","verb":"перезапустить медиасервер"}]),
    ("который сейчас час", [{"intent":"system"}]),
    ("как у тебя дела", [{"intent":"chat","text":"как у тебя дела"}]),
    ("сохрани адрес мастерской", [{"intent":"note","text":"адрес мастерской"}]),
    ("напомни проверить резервную копию вечером", [{"intent":"reminder","text":"проверить резервную копию"}]),
    ("сервер снова доступен", [{"intent":"fact","key":"server","value":"доступен"}]),
    ("почему контейнер постоянно перезапускается", [{"intent":"query","text":"почему контейнер постоянно перезапускается"}]),
    ("выключи свет на кухне", [{"intent":"act","verb":"выключить свет на кухне"}]),
    ("очисти свою память", [{"intent":"system"}]),
    ("ну и денёк сегодня", [{"intent":"chat","text":"ну и денёк сегодня"}]),
    ("запомни, что код от калитки изменился", [{"intent":"note","text":"код от калитки изменился"}]),
    ("я закончил отчёт", [{"intent":"fact","key":"report","value":"закончил"}]),
    ("покажи свободное место на диске", [{"intent":"act","verb":"показать свободное место на диске"}]),
    ("какая погода ожидается утром", [{"intent":"query","text":"какая погода ожидается утром"}]),
    ("напомни через час достать бельё", [{"intent":"reminder","text":"достать бельё"}]),
    ("приятно снова тебя слышать", [{"intent":"chat","text":"приятно снова тебя слышать"}]),
    ("напомни купить молоко и запиши что кофе закончился", [
        {"intent":"reminder","text":"купить молоко"},
        {"intent":"note","text":"кофе закончился"}]),
    ("проверь диск и потом напомни посмотреть результат", [
        {"intent":"act","verb":"проверить диск"},
        {"intent":"reminder","text":"посмотреть результат"}]),
    ("я принял лекарство, запиши дозировку пять миллиграммов", [
        {"intent":"fact","key":"medicine","value":"принял"},
        {"intent":"note","text":"дозировка пять миллиграммов"}]),
]


def main() -> None:
    lines = []
    for utterance, actions in CASES:
        assert valid_actions(actions)
        lines.append(json.dumps({"messages": [
            {"role":"system","content":ROUTE_SYSTEM},
            {"role":"user","content":utterance},
            {"role":"assistant","content":json.dumps(actions, ensure_ascii=False)},
        ], "intents":[a["intent"] for a in actions], "source":"human/route-eval"},
        ensure_ascii=False))
    OUT.write_text("\n".join(lines) + "\n", encoding="utf-8")
    print(f"wrote {len(lines)} held-out route cases -> {OUT}")


if __name__ == "__main__":
    main()
