#!/usr/bin/env python3
"""exp13 — применение ПОДПИСИ владельца к сиду v2 (D30.5/D32). Провенанс подписи.
Владелец подписал спорные + переопределил часть approved-dst (2026-07-12). Спорные → approved.
Вход/выход: guzhenren-seed-v2.yaml (in-place). Лог: diag/glossary_v2_signoff_applied.md. ВНЕ git.
"""
from __future__ import annotations
import yaml
from pathlib import Path

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

# src -> (new_dst, invariant, forms, note_tag)
DECISIONS = {
    "花酒行者": ("Монах Цветочного Вина", False,
             ["Монаха Цветочного Вина", "Монаху Цветочного Вина", "Монаха Цветочного Вина", "Монахом Цветочного Вина", "Монахе Цветочного Вина"],
             "подпись: НЕ «Странник Цветов и Вина»/«Винный Странник»; 行者=монах, 花酒=цветочное вино"),
    "蛊虫": ("гу-червь", False,
            ["гу-червя", "гу-червю", "гу-червя", "гу-червём", "гу-черве"],
            "подпись: гу-червь (подтверждено)"),
    "本命蛊": ("гу Жизни", True, [],
             "подпись: «гу Жизни» (возврат к v1-форме; НЕ «жизненный гу»); инвариант как гу+генитив"),
    "修炼": ("культивация", False,
            ["культивации", "культивации", "культивацию", "культивацией", "культивации"],
            "подпись: культивация (НЕ «совершенствование»)"),
    "修行": ("культивация", False,
            ["культивации", "культивации", "культивацию", "культивацией", "культивации"],
            "подпись: согласовано с 修炼=культивация"),
    "人祖": ("Жэнь Цзу", True, [],
            "подпись: транслит «Жэнь Цзу» (НЕ «Первопредок», НЕ «Рен Зу»); -у → инвариант"),
    "古月山寨": ("деревня Гуюэ", False,
              ["деревни Гуюэ", "деревне Гуюэ", "деревню Гуюэ", "деревней Гуюэ", "деревне Гуюэ"],
              "подпись: «деревня Гуюэ» (НЕ «селение»/«стан»)"),
    "白家寨": ("деревня Бай", False,
            ["деревни Бай", "деревне Бай", "деревню Бай", "деревней Бай", "деревне Бай"],
            "консистентно-выровнено под 古月山寨→деревня (диклоуз владельцу)"),
    "熊家寨": ("деревня Сюн", False,
            ["деревни Сюн", "деревне Сюн", "деревню Сюн", "деревней Сюн", "деревне Сюн"],
            "консистентно-выровнено под 古月山寨→деревня (диклоуз владельцу)"),
    "空窍": ("апертура", False,
            ["апертуры", "апертуре", "апертуру", "апертурой", "апертуре"],
            "подпись: апертура (подтверждено)"),
    "元海": ("море истинной ци", False,
            ["моря истинной ци", "морю истинной ци", "морем истинной ци", "море истинной ци"],
            "подпись: море истинной ци (подтверждено)"),
    "元石": ("первобытный камень", False,
            ["первобытного камня", "первобытному камню", "первобытный камень", "первобытным камнем", "первобытном камне",
             "первобытные камни", "первобытных камней", "первобытным камням", "первобытными камнями", "первобытных камнях"],
            "подпись: «первобытные камни» → канон.ед. «первобытный камень» (НЕ «изначальный»/«первокамень»); +мн.ч. D24.4"),
}


def main():
    data = yaml.safe_load(SEED.read_text(encoding="utf-8"))
    applied, missing = [], []
    for t in data["terms"]:
        s = t.get("src")
        if s in DECISIONS:
            new_dst, inv, forms, tag = DECISIONS[s]
            old = t.get("dst")
            t["dst"] = new_dst
            t["decl"] = {"invariant": inv, "forms": list(forms)}
            t["status"] = "approved"
            t["note"] = f"[signoff:approved] {tag}. (было: «{old}»). " + (t.get("note") or "")
            applied.append((s, old, new_dst))
    seen = {t.get("src") for t in data["terms"]}
    missing = [s for s in DECISIONS if s not in seen]

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

    lg = ["# Глоссарий v2 — ПОДПИСЬ владельца применена (D30.5/D32, 2026-07-12)", "",
          f"Применено решений: {len(applied)}. Все → status:approved. Провенанс: `eval/exp13_seed_signoff.py`.",
          "**Остаётся открытым (низкий приоритет, не блокирует resnapshot):** род бесплатного «гу» (蛊) — "
          "согласование «этот гу» (муж., как «гу-червь») vs «это гу» (сред.). Рекомендация: мужской. `蛊` инвариантен, "
          "single-char (не на горячем пути A3) → влияет только на прозу редактора, не на hard-constraint.", "",
          "| src | было | стало (approved) |", "|---|---|---|"]
    for s, old, new in applied:
        lg.append(f"| {s} | {old} | **{new}** |")
    if missing:
        lg += ["", "⚠ НЕ найдены в сиде (проверить): " + ", ".join(missing)]
    LOG.write_text("\n".join(lg), encoding="utf-8")

    print(f"применено: {len(applied)}, ненайдено: {missing}")
    for s, old, new in applied:
        print(f"  {s}: «{old}» → «{new}» [approved]")


if __name__ == "__main__":
    main()
