#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""从生成好的 `组卷台.html` 里抠出 COURSE，重写 `catalog_full.json`（AI 组卷回归用的专题目录快照）。

⚠ 并库后必须重跑：`test_compose_回归.py` 拿这份快照当 catalog 发给后端，
快照里没有新教材，回归就永远测不到新教材那条路径。

用法：python3 gen_catalog_full.py [组卷台.html]
"""
import json
import os
import re
import sys

HERE = os.path.dirname(os.path.abspath(__file__))
html = sys.argv[1] if len(sys.argv) > 1 else os.path.join(HERE, '组卷台.html')
src = open(html, encoding='utf-8').read()
# ⚠ 三个大常量写在**同一行**：`const DATA=…, COURSE=…, FIG=…, BY={}`，
# 所以不能要求 COURSE 前面紧跟 const。
m = re.search(r'(?:^|[,\s])COURSE\s*=\s*(?=\{)', src)
if not m:
    sys.exit('✗ 抠不出 COURSE')
i = src.index('{', m.end())
COURSE, _ = json.JSONDecoder().raw_decode(src, i)

cat = {tb: {gg: [n[1] for n in nodes] for gg, nodes in ggs.items()}
       for tb, ggs in COURSE.items()}
out = os.path.join(HERE, 'catalog_full.json')
with open(out, 'w', encoding='utf-8') as f:
    json.dump(cat, f, ensure_ascii=False)
print('写出 %s  %.0f KB' % (os.path.basename(out), os.path.getsize(out) / 1024))
for tb, ggs in cat.items():
    print('  %-10s %2d 个年级轴 · %d 个节' % (tb, len(ggs), sum(len(v) for v in ggs.values())))
