#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os, json
from datetime import datetime as dt

DIR = "/root/.openclaw/workspace/LPRC_skill/data/realtime"
OUT = "/root/.openclaw/workspace/aiweb/888/index.html"

def j(fn):
    p = os.path.join(DIR, fn)
    return json.load(open(p)) if os.path.exists(p) else {}

def pct(v):
    if v > 0: return "+%.1f%%" % v
    if v < 0: return "%.1f%%" % v
    return "平"

def build():
    now = dt.now()
    date_s = now.strftime("%Y-%m-%d")

    gi = j("global_indices.json")
    se = j("sentiment.json")
    ho = j("hot_sectors.json")
    an = j("announcements.json")
    tc = j("technical.json")
    ge = j("geo_events.json")
    fx = j("forex.json")
    bn = j("bonds.json")
    cr = j("crypto.json")

    upd = gi.get("update_time") or now.strftime("%H:%M")
    gd = gi.get("data") or {}
    fxd = fx.get("data") or {}
    bnd = bn.get("data") or {}
    crd = cr.get("data") or {}

    # 1. 隔夜全球 - 人话
    dji = gd.get("dji", {}).get("pct", 0)
    nas = gd.get("ixic", {}).get("pct", 0)
    hsi = gd.get("hsi", {}).get("pct", 0)
    gcc = gd.get("hf_GC", {}).get("change", 0)
    parts = []
    if dji < -0.3: parts.append("道指小跌%.1f%%" % abs(dji))
    elif dji > 0.3: parts.append("道指小涨%.1f%%" % dji)
    else: parts.append("道指平稳")
    if nas > 1: parts.append("纳指涨幅%.1f%%" % nas)
    elif nas < -1: parts.append("纳指跌幅%.1f%%" % abs(nas))
    if hsi > 0.5: parts.append("港股涨%.1f%%" % hsi)
    elif hsi < -0.5: parts.append("港股跌%.1f%%" % abs(hsi))
    if gcc > 2: parts.append("黄金大涨%.0f美元" % gcc)
    elif gcc < -2: parts.append("黄金大跌%.0f美元" % abs(gcc))
    else: parts.append("黄金基本持平")
    s1 = "，".join(parts) + "。"

    # 2. 今日要闻 - 地缘
    evts = ge.get("events") or []
    if evts:
        e = evts[0]
        s2 = (e.get("sentiment") or "") + " " + (e.get("title") or "")[:38]
    else:
        s2 = "暂无重大消息。"

    # 3. 盘前风向
    sent_raw = se.get("sentiment") or "中性"
    sc = "up" if "多" in sent_raw else "down" if "空" in sent_raw else "neutral"
    items_se = se.get("items") or []
    a50c = (items_se[0].get("change") or 0) if items_se else 0
    cny = fxd.get("USD_CNY") or 0
    if abs(a50c) < 0.2: a50s = "A50期货平稳"
    elif a50c > 0: a50s = "A50期货小涨%.2f%%" % a50c
    else: a50s = "A50期货小跌%.2f%%" % abs(a50c)
    if 6.85 <= cny <= 6.95: cns = "人民币汇率稳定"
    elif cny > 6.95: cns = "人民币小幅走弱"
    else: cns = "人民币小幅走强"
    s3 = a50s + "，" + cns + "；整体情绪" + sent_raw + "。"

    # 4. 热点板块
    st = ho.get("sector_stats") or {}
    if st:
        top = list(st.items())[:3]
        pts = []
        for n, v in top:
            z = v.get("zt_count", 0)
            st_v = v.get("strong_count", 0)
            if z >= 3: pts.append(n + "今日涨停潮")
            elif st_v >= 5: pts.append(n + "强势明显")
            else: pts.append(n)
        s4 = "最热：" + "、".join(pts)
    else:
        hl = (ho.get("sector_heat") or {}).get("hot") or []
        s4 = "最热：" + "、".join(hl[:3]) if hl else "暂无明显热点"

    # 5. 重要资讯
    anns = an.get("announcements") or []
    risky = [x for x in anns if "监管" in (x.get("tag") or "") or "风险" in (x.get("tag") or "")]
    if risky:
        s5 = "⚠️ " + (risky[0].get("title") or "")[:42]
    elif anns:
        s5 = (anns[0].get("title") or "")[:50]
    else:
        s5 = "暂无重要公告。"

    # 6. 技术参考
    tidxs = tc.get("indices") or []
    if tidxs:
        pts = []
        for x in tidxs:
            nm = x.get("name") or ""
            sp2 = x.get("spot") or 0
            m5 = x.get("ma5") or 0
            m10 = x.get("ma10") or 0
            if sp2 and m5:
                if m5 > m10: pts.append(nm + "均线多头，偏强")
                elif m5 < m10: pts.append(nm + "均线空头，偏弱")
                else: pts.append(nm + "震荡整理")
        s6 = " | ".join(pts)
    else:
        s6 = "暂无技术数据。"

    # extras
    extras = []
    vix = gd.get("usVIX", {}).get("price") or 0
    if vix: extras.append("VIX=%.1f" % vix)
    b10 = bnd.get("US10Y") or 0
    if b10: extras.append("美债10Y=%.2f%%" % b10)
    btc = crd.get("BTC", {}).get("price") or 0
    if btc: extras.append("BTC=$%.0f" % btc)
    extra_html = ""
    if extras:
        extra_html = '<div class="extra">' + " · ".join(extras) + "</div>"

    html = (
        '<!DOCTYPE html>\n'
        '<html lang="zh-CN">\n'
        '<head>\n'
        '<meta charset="UTF-8">\n'
        '<meta name="viewport" content="width=device-width,initial-scale=1">\n'
        '<title>盘前速递</title>\n'
        '<style>\n'
        '*{margin:0;padding:0;box-sizing:border-box}\n'
        'body{font-family:"PingFang SC","Microsoft YaHei",-apple-system,sans-serif;background:#090d11;color:#c0ccd8;padding:20px 16px;min-height:100vh}\n'
        '.header{text-align:center;padding:22px 0 18px}\n'
        '.header h1{font-size:1.5rem;font-weight:700;letter-spacing:4px;color:#fff}\n'
        '.header .sub{font-size:0.72rem;color:#4a5a6a;margin-top:5px;letter-spacing:1px}\n'
        '.header .upd{font-size:0.62rem;color:#3a4a5a;margin-top:3px}\n'
        '.sep{height:1px;background:#1a2430;margin:0 0 18px}\n'
        '.sec{margin-bottom:18px}\n'
        '.sec-label{font-size:0.65rem;font-weight:700;color:#f0c040;text-transform:uppercase;letter-spacing:1.5px;margin-bottom:8px}\n'
        '.sec-text{font-size:0.93rem;line-height:1.9;color:#c0ccd8}\n'
        '.tag{display:inline-block;font-size:0.68rem;font-weight:700;padding:2px 8px;border-radius:4px;margin-right:6px}\n'
        '.tag.up{background:rgba(0,230,118,0.12);color:#00e676}\n'
        '.tag.down{background:rgba(255,61,90,0.12);color:#ff3d5a}\n'
        '.tag.neutral{background:#1a2430;color:#4a5a6a}\n'
        '.extra{font-size:0.7rem;color:#4a5a6a;margin-top:16px;padding-top:14px;border-top:1px solid #1a2430;line-height:2}\n'
        '.footer{text-align:center;padding:18px 0 10px;color:#4a5a6a;font-size:0.65rem}\n'
        '.footer a{color:#1a88ff;text-decoration:none}\n'
        '.up{color:#00e676}.down{color:#ff3d5a}\n'
        '</style>\n'
        '</head>\n'
        '<body>\n\n'
        '<div class="header">\n'
        '<h1>盘前速递</h1>\n'
        '<div class="sub">' + date_s + '</div>\n'
        '<div class="upd">更新 ' + upd + '</div>\n'
        '</div>\n\n'
        '<div class="sep"></div>\n\n'
        '<div class="sec">\n'
        '<div class="sec-label">🌍 隔夜全球</div>\n'
        '<div class="sec-text">' + s1 + '</div>\n'
        '</div>\n\n'
        '<div class="sec">\n'
        '<div class="sec-label">📊 今日要闻</div>\n'
        '<div class="sec-text">' + s2 + '</div>\n'
        '</div>\n\n'
        '<div class="sec">\n'
        '<div class="sec-label">📈 盘前风向</div>\n'
        '<div class="sec-text">\n'
        '<span class="tag ' + sc + '">' + sent_raw + '</span>\n'
        + s3 + '\n'
        '</div>\n'
        '</div>\n\n'
        '<div class="sec">\n'
        '<div class="sec-label">🔥 热点板块</div>\n'
        '<div class="sec-text">' + s4 + '</div>\n'
        '</div>\n\n'
        '<div class="sec">\n'
        '<div class="sec-label">📰 重要资讯</div>\n'
        '<div class="sec-text">' + s5 + '</div>\n'
        '</div>\n\n'
        '<div class="sec">\n'
        '<div class="sec-label">⚡ 技术参考</div>\n'
        '<div class="sec-text">' + s6 + '</div>\n'
        '</div>\n\n'
        + extra_html + '\n\n'
        '<div class="footer">\n'
        'LPRC数据 &middot; <a href="/888/tdx_dashboard.py">刷新页面</a>\n'
        '</div>\n\n'
        '<script>// auto-refresh disabled</script>\n'
        '</body>\n'
        '</html>\n'
    )

    with open(OUT, "w", encoding="utf-8") as f:
        f.write(html)
    print("[%s] 盘前速递已生成" % dt.now().strftime("%H:%M"))

if __name__ == "__main__":
    build()
