#!/usr/bin/env python3
"""exp12 — пере-генерация глоссария (v2) по консенсусу двух флагманов + мои каллы.

Владелец делегировал «перегенерируй без меня». Источник рекомендаций: разборы GPT+Claude
(diag/reading/ОЦЕНКА_ФЛАГМАНА.md + вставка владельца). Высокая уверенность — где ОБА флагмана
сошлись; контестные (gu-род, культивация/совершенствование, Первопредок/Жэнь-Цзу) ПОМЕЧЕНЫ ⚑
для ратификации владельцем/оркестратором — НЕ финал.

Вход: guzhenren-seed.yaml (v1, 49 терминов). Выход: guzhenren-seed-v2.yaml + changelog.
НИЧЕГО не идёт в прод без ратификации + resnapshot. Оба файла ВНЕ git.
"""
from __future__ import annotations
import yaml
from pathlib import Path

BOOK = Path("/home/ubuntu/books/gu-zhenren")
SRC = BOOK / "guzhenren-seed.yaml"
OUT = BOOK / "guzhenren-seed-v2.yaml"
LOG = BOOK / "diag" / "glossary_v2_changelog.md"

# --- изменения существующих терминов: src -> (new_dst, forms|None, status|None, rationale, conf) ---
CHANGES = {
    "空窍": ("апертура", ["апертуры","апертуре","апертуру","апертурой","апертуре"], "approved",
            "оба флагмана — топ-проблема: «врата» ломают грамматику («одни врата»); «апертура» = фан-вики жанра", "HIGH"),
    "开窍": ("открытие апертуры", ["открытия апертуры","открытию апертуры","открытием апертуры","открытии апертуры"], None,
            "согласовано с 空窍→апертура; 开窍大典 = Церемония пробуждения/обряд открытия апертуры", "HIGH"),
    "真元": ("истинная ци", ["истинной ци","истинной ци","истинную ци","истинной ци","истинной ци"], None,
            "оба: НЕ «истинная энергия» (физикализм); отделить от 元气 (изначальная ци)", "HIGH"),
    "元海": ("море истинной ци", ["моря истинной ци","морю истинной ци","морем истинной ци","море истинной ци"], None,
            "согласовано с 真元→истинная ци", "HIGH"),
    "本命蛊": ("жизненный гу", ["жизненного гу","жизненному гу","жизненного гу","жизненным гу","жизненном гу"], "approved",
             "оба: НЕ «гу Жизни» (читается как ВИД, как «гу Надежды»); это СТАТУС. ⚑ род «гу» — см. флаг", "HIGH"),
    "花酒行者": ("Странник Цветов и Вина", ["Странника Цветов и Вина","Страннику Цветов и Вина","Странника Цветов и Вина","Странником Цветов и Вина","Страннике Цветов и Вина"], "approved",
              "оба: сохранить 花 (=блуд; злодей — насильник 采花大盗); «Винный Странник» терял половину смысла", "HIGH"),
    "蛊虫": ("гу-червь", ["гу-червя","гу-червю","гу-червя","гу-червём","гу-черве"], None,
            "«гу-тварь» пейоративно; «гу-червь» или просто «гу». ⚑ род «гу»", "MED"),
    "元石": ("изначальный камень", ["изначального камня","изначальному камню","изначальный камень","изначальным камнем","изначальном камне"], None,
            "«первокамень» → «двадцать первокамень» читается как «двадцать первый»; «изначальный» согласован с рядом 元", "MED"),
    "古月山寨": ("селение Гуюэ", ["селения Гуюэ","селению Гуюэ","селением Гуюэ","селении Гуюэ"], None,
              "«стан» = воинский лагерь; 山寨 здесь — укреплённое селение/деревня", "MED"),
    "白家寨": ("селение Бай", ["селения Бай","селению Бай","селением Бай","селении Бай"], None, "согласовано", "MED"),
    "熊家寨": ("селение Сюн", ["селения Сюн","селению Сюн","селением Сюн","селении Сюн"], None, "согласовано", "MED"),
}

# --- новые термины (были GAP → модель угадывала) ---
ADDITIONS = [
    dict(src="长生", dst="бессмертие", type="term", forms=["бессмертия","бессмертию","бессмертие","бессмертием","бессмертии"],
         note="chángshēng; вечная жизнь/бессмертие — СКВОЗНАЯ тема книги; НЕ «долголетие» (провалили 5/8 вариантов)", conf="HIGH"),
    dict(src="修炼", dst="культивация", type="term", forms=["культивации","культивации","культивацию","культивацией","культивации"],
         note="xiūliàn; культивация/культивировать. ⚑ лит.альтернатива «совершенствование» (флагманы для издания) — владельцу", conf="MED⚑"),
    dict(src="修行", dst="культивация", type="term", forms=["культивации","культивации","культивацию","культивацией","культивации"],
         note="xiūxíng; практика культивации; согласовано с 修炼. ⚑ см. флаг", conf="MED⚑"),
    dict(src="人祖", dst="Первопредок", type="name", forms=["Первопредка","Первопредку","Первопредка","Первопредком","Первопредке"],
         note="Rénzǔ; говорящее имя (Праотец человечества). НЕ «Рен Зу» (англ.релей-ошибка романизации). ⚑ альт-имя «Жэнь Цзу» (Палладица) — владельцу", conf="MED⚑"),
    dict(src="族长", dst="глава клана", type="title", forms=["главы клана","главе клана","главу клана","главой клана","главе клана"],
         note="zúzhǎng; глава клана — НАД старейшинами; частая ошибка черновика «старейшина» рушит иерархию сцены", conf="HIGH"),
    dict(src="家老", dst="старейшина", type="title", forms=["старейшины","старейшине","старейшину","старейшиной","старейшине"],
         note="jiālǎo; старейшина клана; 学堂家老 = старейшина академии. Развести с 族长", conf="HIGH"),
    dict(src="困境", dst="Беды", type="term", forms=["Бед","Бедам","Беды","Бедами","Бедах"],
         note="kùnjìng; стая зверей в легенде о Первопредке; «Беды»/«Невзгоды» живее абстрактных «Трудностей» как имя стаи", conf="MED"),
    dict(src="炼化", dst="очистить и подчинить", type="term", invariant=True,
         note="liànhuà; очистить-и-подчинить живого гу; НЕ «переплавить» (слишком металлично). Кратко «очистить»", conf="MED"),
]

# ⚑ ТОП-ФЛАГ (не применяю молча): род «гу».
GU_GENDER_FLAG = ("⚑ РОД «гу»: сид держит НЕСКЛОНЯЕМЫЙ СРЕДНИЙ; оба флагмана рекомендуют МУЖСКОЙ "
                  "(«этот гу», как «жук»; согласуется с «винный червь — он»). Это меняет согласование во ВСЕХ "
                  "гу-именах — НЕ флипаю молча. В v2 «жизненный гу»/«гу-червь» даны в МУЖСКОМ как рекомендация; "
                  "решение по проекту — за владельцем/оркестратором.")
KEEP_FLAGS = [
    "蛊师 → «гу-мастер» ОСТАВЛЕН (владелец хотел «Мастер Гу», но это конфликтует с титулом 蛊真人/«Мастер Гу»/«Преподобный Гу») — флаг владельцу.",
    "甲乙丙丁 → «разряд А/Б/В/Г» ОСТАВЛЕН (Claude одобрил русификацию; лучше латиницы A–D).",
    "采花大盗 → рекомендация «похититель цветов» + СНОСКА при 1-м употреблении (эвфемизм изнасилования) — но сноски = отдельная задача бэкенда, не в сиде.",
]


def main():
    data = yaml.safe_load(SRC.read_text(encoding="utf-8"))
    terms = data["terms"]
    changed, added = [], []

    for t in terms:
        s = t.get("src")
        if s in CHANGES:
            new_dst, forms, status, rat, conf = CHANGES[s]
            old = t.get("dst")
            t["dst"] = new_dst
            if forms is not None:
                t["decl"] = {"invariant": False, "forms": forms}
            if status:
                t["status"] = status
            t["note"] = f"[v2:{conf}] {rat}. (было: «{old}»). " + t.get("note", "")
            changed.append((s, old, new_dst, rat, conf))

    for a in ADDITIONS:
        entry = {"src": a["src"], "dst": a["dst"], "type": a["type"],
                 "decl": {"invariant": a.get("invariant", False), "forms": a.get("forms", [])},
                 "since_ch": 0, "status": "approved",
                 "note": f"[v2-NEW:{a['conf']}] {a['note']}"}
        terms.append(entry)
        added.append((a["src"], a["dst"], a["note"], a["conf"]))

    OUT.write_text(yaml.dump(data, allow_unicode=True, sort_keys=False, width=200), encoding="utf-8")

    # changelog
    lg = ["# Глоссарий 蛊真人 — v2 (пере-курация по флагманам, exp12)", "",
          f"Изменено: {len(changed)} · Добавлено: {len(added)} · Всего терминов: {len(terms)}",
          "Источник: консенсус GPT+Claude (diag/reading/ОЦЕНКА_ФЛАГМАНА.md). ⚑ = контестно, за владельцем.",
          "**НЕ финал, НЕ в прод без ратификации + resnapshot.**", "",
          "## Изменённые термины", "",
          "| src | было | стало | conf | почему |", "|---|---|---|---|---|"]
    for s, old, new, rat, conf in changed:
        lg.append(f"| {s} | {old} | **{new}** | {conf} | {rat} |")
    lg += ["", "## Новые термины (были GAP — модель угадывала)", "",
           "| src | dst | conf | note |", "|---|---|---|---|"]
    for s, dst, note, conf in added:
        lg.append(f"| {s} | **{dst}** | {conf} | {note} |")
    lg += ["", "## Оставлено намеренно / флаги", ""]
    lg.append(f"- {GU_GENDER_FLAG}")
    for k in KEEP_FLAGS:
        lg.append(f"- {k}")
    lg += ["", "## Контестные каллы (⚑ — за владельцем)",
           "- 修炼/修行 → **культивация** (твоё предпочтение) vs «совершенствование» (флагманы для издания).",
           "- 人祖 → **Первопредок** (смысл, оба флагмана как минимум допускают) vs имя «Жэнь Цзу» (НЕ «Рен Зу»).",
           "- род «гу»: **мужской** (рекоменд. флагманов) vs средний (текущий сид).",
           "- 蛊师 «гу-мастер» vs «Мастер Гу» (конфликт с титулом книги)."]
    LOG.write_text("\n".join(lg), encoding="utf-8")

    print(f"v2 seed → {OUT}")
    print(f"changelog → {LOG}")
    print(f"изменено {len(changed)}, добавлено {len(added)}, всего {len(terms)}")
    print("\nИзменения:")
    for s, old, new, rat, conf in changed:
        print(f"  {s}: «{old}» → «{new}» [{conf}]")
    print("Новые:")
    for s, dst, note, conf in added:
        print(f"  {s} → «{dst}» [{conf}]")


if __name__ == "__main__":
    main()
