"""建卡後補工作坊四欄（母卡 relation／Stage／Model／Effort／Repo）並在卡尾 append 模型理由、母卡 append 子卡清單。

用法：python patch_workshop_fields.py notion-cards-made.json
made.json 是 notion_create_case.py --out 的產物（第 0 筆是母卡）。
Notion API 走 agent-workshop 的 notion_case.notion_request（token 由它從 .env 讀）。
"""
import json
import sys

sys.path.insert(0, "/Users/chouraymond/Projects/Jedicogy/agent-workshop/scripts")
import notion_case as nc  # noqa: E402

# 子卡依 requirement 後綴對應：(Stage, Model, Effort, Repo, 理由)
PLAN = {
    "FR-165.1": (1, "sonnet", "medium", None,
                 "一支照範本寫的 migration：INSERT／UPDATE／綁定／bump／驗證段，範本與現況值都在卡上；機械性，sonnet 中強度。"),
    "FR-165.2": (1, "opus", "high", "fe",
                 "新殼頁＋新卡片元件＋三支既有元件改版面不改邏輯＋路由轉向＋i18n，要在既有 254 行頁面裡做 slot 拆分並保證功能一個不少；規格已定但要組織多檔與邊界（權限分頁、TabView 雷區）；opus 高強度。"),
    "FR-165.3": (1, "sonnet", "medium", "jedi-packages",
                 "套件加一個 repo 方法與一個 service 方法＋測試，形狀照旁邊的 list_recent／status；機械性，sonnet 中強度。"),
    "FR-165.4": (2, "opus", "medium", None,
                 "主專案四層接一支分頁端點，形狀照既有 status 端點與分頁慣例；要處理 path dependency 與 meta 鍵陷阱；opus 中強度。"),
    "FR-165.5": (3, "sonnet", "medium", None,
                 "照 design 改兩頁 SPEC 與手冊入口段、加一條規則；grep 驗收；機械性，sonnet 中強度。"),
}


def main(path: str) -> None:
    made = json.load(open(path, encoding="utf-8"))
    parent, children = made[0], made[1:]
    print(f"母卡 {parent['no']} {parent['id']}")
    for card in children:
        req = card["title"].split(" ", 1)[0]
        if req not in PLAN:
            print(f"  跳過（PLAN 無此卡）：{card['title'][:40]}")
            continue
        stage, model, effort, repo, why = PLAN[req]
        props = {
            "母卡": {"relation": [{"id": parent["id"]}]},
            "Stage": {"number": stage},
            "Model": {"select": {"name": model}},
            "Effort": {"select": {"name": effort}},
        }
        if repo:
            props["Repo"] = {"select": {"name": repo}}
        nc.notion_request("PATCH", f"/pages/{card['id']}", {"properties": props})
        nc.notion_request("PATCH", f"/blocks/{card['id']}/children", {"children": [
            {"object": "block", "type": "heading_2",
             "heading_2": {"rich_text": [{"type": "text", "text": {"content": "建議模型與思考強度（首腦判斷）"}}]}},
            {"object": "block", "type": "paragraph",
             "paragraph": {"rich_text": [{"type": "text", "text": {"content": f"Stage {stage}／Model {model}／Effort {effort}。{why}"}}]}},
        ]})
        print(f"  {card['no']} {req}: Stage {stage} / {model} / {effort} / repo={repo or 'be(主)'}")

    rows = []
    for card in children:
        req = card["title"].split(" ", 1)[0]
        if req in PLAN:
            stage, model, effort, repo, _ = PLAN[req]
            rows.append(f"批 {stage}｜{card['no']}｜{card['title']}｜{model}/{effort}｜{card['url']}")
    rows.sort()
    blocks = [
        {"object": "block", "type": "heading_2",
         "heading_2": {"rich_text": [{"type": "text", "text": {"content": "子卡清單與工作坊批次"}}]}},
        {"object": "block", "type": "paragraph",
         "paragraph": {"rich_text": [{"type": "text", "text": {"content":
             "批 1：FR-165.1（選單 migration，主 repo）＋ FR-165.2（前端殼頁與卡片化，fe）＋ FR-165.3（套件分頁查詢，jedi-packages）可平行，不撞檔。"
             "批 2：FR-165.4（主專案分頁端點）依賴 .3 的套件方法。"
             "批 3：FR-165.5（收尾文件）等批 1／2 全驗完**且 FR-156 G1（CM-3000）收完**才派。"}}]}},
    ]
    for r in rows:
        blocks.append({"object": "block", "type": "bulleted_list_item",
                       "bulleted_list_item": {"rich_text": [{"type": "text", "text": {"content": r[:1900]}}]}})
    nc.notion_request("PATCH", f"/blocks/{parent['id']}/children", {"children": blocks})
    print("母卡子卡清單已 append")


if __name__ == "__main__":
    main(sys.argv[1])
