#!/usr/bin/env python3
"""dashboard_build.py — 每日构建看板：跑 dashboard_data.py → 内嵌K线 → 注入模板
输出 /Users/xpresso/zt_app/dashboard.html（自包含，file:// 直接打开）
"""
import json, os, subprocess, sys

QUANT = '/Users/xpresso/zt_app'
TEMPLATE = f'{QUANT}/dashboard_template.html'
OUT = f'{QUANT}/dashboard.html'
KC = f'{QUANT}/kline_cache'

def main():
    # 1. 生成数据（含 kline_cache 预生成）
    r = subprocess.run([sys.executable, f'{QUANT}/code/dashboard_data.py'], capture_output=True, text=True)
    print(r.stdout.strip())
    if r.returncode != 0:
        print(r.stderr[:500]); sys.exit(1)
    D = json.load(open(f'{QUANT}/dashboard_data.json'))
    # 2. K线数据独立文件（主页面瘦身, 按需 fetch）
    idx = D.pop('hist_kline_index', {})
    kl = {}
    for key, fn in idx.items():
        fp = f'{KC}/{fn}'
        if os.path.exists(fp):
            kl[key] = json.load(open(fp))
    json.dump(kl, open(f'{QUANT}/klines.json', 'w'), ensure_ascii=False)
    D['hist_klines'] = {}   # 占位, 前端异步加载
    # 3. 注入模板
    html = open(TEMPLATE).read().replace('__DATA__', json.dumps(D, ensure_ascii=False))
    open(OUT, 'w').write(html)
    print(f'dashboard.html 已构建: {len(html)/1e6:.2f} MB（主页面）; klines.json: {len(kl)} 个K线 {os.path.getsize(f"{QUANT}/klines.json")/1e6:.1f} MB（按需加载）')

if __name__ == '__main__':
    main()
