#!/usr/bin/env python3
"""完整版编辑风格HTML生成器 - 基于完整Markdown源文件"""

import re
import sys

def read_md():
    with open('/root/.hermes/skills/qianxiaodou-engine/data/reports/report_20260814.md', 'r', encoding='utf-8') as f:
        return f.read()

def read_css():
    with open('/root/web_reports/report_editorial_full.html', 'r', encoding='utf-8') as f:
        tpl = f.read()
    css = re.search(r'<style>(.*?)</style>', tpl, re.DOTALL)
    return css.group(1) if css else ''

def escape_html(text):
    """转义HTML特殊字符"""
    return (text.replace('&', '&amp;')
                .replace('<', '&lt;')
                .replace('>', '&gt;')
                .replace('"', '&quot;'))

def color_number(text):
    """给数字上色：+红 -绿"""
    text = re.sub(r'\+(\d+\.?\d*%)', r'<span class="up">+\1</span>', text)
    text = re.sub(r'-(\d+\.?\d*%)', r'<span class="down">-\1</span>', text)
    return text

def bold_to_b(text):
    """加粗标记"""
    return re.sub(r'\*\*(.*?)\*\*', r'<b>\1</b>', text)

def parse_table(lines):
    """解析Markdown表格"""
    if len(lines) < 3:
        return ''
    
    # 表头
    headers = [c.strip() for c in lines[0].strip('|').split('|')]
    # 跳过分隔行
    rows = []
    for line in lines[2:]:
        if not line.strip():
            break
        cells = [c.strip() for c in line.strip('|').split('|')]
        rows.append(cells)
    
    html = '<table>\n<thead>\n<tr>\n'
    for h in headers:
        html += f'<th>{escape_html(h)}</th>\n'
    html += '</tr>\n</thead>\n<tbody>\n'
    
    for row in rows:
        html += '<tr>\n'
        for cell in row:
            cell = color_number(escape_html(cell))
            cell = bold_to_b(cell)
            html += f'<td>{cell}</td>\n'
        html += '</tr>\n'
    
    html += '</tbody>\n</table>\n'
    return html

def build_html():
    md = read_md()
    css = read_css()
    
    # 分割成行
    lines = md.split('\n')
    
    # 开始构建HTML
    html = f'''<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>市场复盘 | 2026.08.14</title>
<style>{css}</style>
</head>
<body>

<div class="top-bar">
  <div class="container">
    钱小兜分析引擎 V10 · DAILY MARKET REVIEW · 数据来源: WeStock / 通达信MCP / 腾讯行情
  </div>
</div>

<div class="container">

<div class="masthead">
  <h1>市场复盘</h1>
  <div style="font-size: 13px; color: var(--sub); margin: 12px 0;">2026年8月14日 星期五</div>
  <div class="meta">
    <span class="meta-item"><span class="meta-label">行情</span> <span class="meta-value">春→夏</span></span>
    <span class="meta-item"><span class="meta-label">综合评分</span> <span class="meta-value gold">63/100</span></span>
    <span class="meta-item"><span class="meta-label">恐慌度</span> <span class="meta-value down">30</span></span>
    <span class="meta-item"><span class="meta-label">涨停</span> <span class="meta-value up">64只</span></span>
    <span class="meta-item"><span class="meta-label">跌停</span> <span class="meta-value down">13只</span></span>
    <span class="meta-item"><span class="meta-label">成交</span> <span class="meta-value">21428亿</span> <span class="meta-value down">(-16%)</span></span>
    <span class="meta-item"><span class="meta-label">主线</span> <span class="meta-value gold">芯片/光通信</span></span>
  </div>
</div>

<!-- KPI -->
<div class="kpi-grid">
  <div class="kpi hero"><div class="label">综合评分</div><div class="value">63</div><div class="sub">春→夏过渡</div></div>
  <div class="kpi"><div class="label">恐慌度</div><div class="value down">30</div><div class="sub">偏乐观</div></div>
  <div class="kpi"><div class="label">仓位上限</div><div class="value">7-8成</div><div class="sub">执行5-7成</div></div>
  <div class="kpi"><div class="label">涨停</div><div class="value up">64只</div><div class="sub">较昨 +2</div></div>
  <div class="kpi"><div class="label">跌停</div><div class="value down">13只</div><div class="sub">较昨 +9</div></div>
  <div class="kpi"><div class="label">两市成交</div><div class="value">21428亿</div><div class="sub">缩量 -16%</div></div>
  <div class="kpi"><div class="label">涨跌比</div><div class="value">2400:2970</div><div class="sub">45% 跌多</div></div>
  <div class="kpi"><div class="label">最高板</div><div class="value">5板</div><div class="sub">芯片链</div></div>
</div>

<!-- 00 复盘摘要 -->
<div class="section">
  <div class="section-head">
    <div class="section-num">00</div>
    <div class="section-title">复盘摘要</div>
    <div class="section-subtitle">EXECUTIVE SUMMARY</div>
  </div>
  
  <div class="digest">
    <div class="digest-item">
      <div class="digest-num">01</div>
      <div class="digest-content">
        <div class="digest-title">指数缩量分化</div>
        <div class="digest-text">沪指平收<b>+0.01%</b>,创业板<b>+1.12%</b>领涨,中证1000<b>+0.70%</b>,权重滞涨、成长反弹,成交<b>21428亿</b>缩量<b>16%</b>。</div>
      </div>
    </div>
    
    <div class="digest-item">
      <div class="digest-num">02</div>
      <div class="digest-content">
        <div class="digest-title">情绪修复与出清并存</div>
        <div class="digest-text">涨停<b>64只</b>(昨62,+2)未回80+,跌停<b>13只</b>(昨4,+9)高位人气股集体退潮,涨跌家数<b>2400:2970</b>较昨显著修复但仍跌多涨少。</div>
      </div>
    </div>
    
    <div class="digest-item">
      <div class="digest-num">03</div>
      <div class="digest-content">
        <div class="digest-title">资金抱团算力链</div>
        <div class="digest-text">5G概念<b>+142.9亿</b>/光通信<b>+126.7亿</b>/CPO<b>+123.0亿</b>/液冷服务器<b>+117.2亿</b>净流入居前,CPO概念<b>+3.04%</b>领涨,资金与价格共振。</div>
      </div>
    </div>
    
    <div class="digest-item highlight">
      <div class="digest-num">04</div>
      <div class="digest-content">
        <div class="digest-title">核心矛盾</div>
        <div class="digest-text">缩量之下的结构修复能否升级为主线行情——<b>光通信是否连续晋级、跌停能否收敛</b>,决定反弹性质。</div>
      </div>
    </div>
    
    <div class="digest-item">
      <div class="digest-num">05</div>
      <div class="digest-content">
        <div class="digest-title">明日动作</div>
        <div class="digest-text">仓位上限<b>7-8成</b>(执行5-7成),低吸光通信/医药核心、回避高位题材,<b>放量+涨停80+</b>方可加仓。</div>
      </div>
    </div>
  </div>
</div>

<!-- 模块 0: 消息面 -->
<div class="section">
  <div class="section-head">
    <div class="section-num">00</div>
    <div class="section-title">消息面与驱动归因</div>
    <div class="section-subtitle">NEWS & CATALYST</div>
  </div>
  
  <h3 style="font-size: 16px; font-weight: 700; color: var(--ink); margin: 24px 0 12px;">外围</h3>
  <ol class="list">
    <li>隔夜美股(8/13):7月CPI低于预期(环比+0.1%、核心+2.5%)强化降息预期,纳指+0.54%、标普+0.26%,AI与存储领涨(CoreWeave+19%、超微电脑+19%、戴尔+10%、美光+5%、费城半导体+2%) → 传导:A股算力/光模块/存储产业链高开修复,CPO、光通信、液冷服务器包揽资金净流入前四(合计超500亿)。</li>
    <li>闪迪财报超预期并给出乐观指引,存储景气向亚太传导,8/14亚洲存储芯片股集体走强 → A股芯片链情绪升温,芯片方向17只涨停居各概念之首。</li>
    <li>日韩股市持续反攻(韩股重回牛市) → 亚太风险偏好修复,早盘A股普遍高开。</li>
    <li>美伊谈判僵局、油价突破83美元、金价走强 → 资源品偏强但非当日资金主线;美国对加拿大50%额外关税8/19生效,外部扰动未落地,仅作风险提示。</li>
  </ol>
  
  <h3 style="font-size: 16px; font-weight: 700; color: var(--ink); margin: 24px 0 12px;">内因</h3>
  <ol class="list">
    <li><b>中际旭创8/13晚间公告拟17.47亿元受让中石科技10.47%股份(55.70元/股)</b>,绑定高端光模块散热材料,产业协同逻辑明确 → 中石科技20cm涨停(封单10.43亿居两市第一),剑桥科技、亨通光电涨停,CPO概念+3.04%领涨概念涨幅榜,光通信净流入+126.7亿——<b>当日最强催化</b>,直接点燃光通信主线。</li>
    <li>中报业绩集中验证:太辰光H1净利+118.02%、华工科技净利9.11亿(+44.87%)、中芯国际Q2净利环比+142%且营收首破30亿美元、中国电信H1净利+5.5% → 光通信/半导体业绩共振,为算力链修复提供基本面支撑,板块从"消息脉冲"升级为"业绩+催化"双驱动。</li>
    <li>央行流动性呵护:8/15开展5000亿元6个月买断式逆回购,8/14起连续四日隔夜逆回购每日不超6000亿元,Q2货政报告强调加大逆周期调节 → 缓解资金面担忧,稳定市场风险偏好,为缩量阴跌后反弹提供流动性底。</li>
    <li>发改委着手"十五五"海洋经济发展规划编制 → 海洋经济概念盘中活跃,资金净流入+50.6亿(净流入榜第8),海洋王2连板。</li>
    <li>创新药出海数据爆发:上半年中国创新药对外授权累计交易额约1100亿美元(已达2025年全年80%),药明康德中报超预期并上调全年指引,石药集团收到阿斯利康3000万美元首付款 → 医药板块延续强势,神奇制药、博济医药2连板,华森制药、开开实业、重药控股涨停,8月以来申万医药生物指数+9.22%,出海+业绩逻辑持续兑现。</li>
    <li>AI电子布供需逆转:AI服务器电子布用量为传统服务器3-5倍,高端LowCTE/LowDK电子布短缺且供给受限(铂铑合金涨价、窑炉投资大) → 玻璃玻纤行业+4.31%居行业涨幅第一,中材科技涨停。</li>
    <li>稀土景气与整合预期:中国稀土H1归母净利2.37亿(+46.53%),作为中国稀土集团核心上市平台整合预期升温;氧化镨钕上半年+22.42%,10家稀土企业中报报喜 → 中国稀土涨停,小金属/稀土永磁联动活跃。</li>
    <li>高位人气股集中澄清引爆退潮:德龙汇能"10天6板"后否认半导体资产注入(明确12个月内无重组计划)、秦安股份否认人形机器人业务、城地香江澄清无算力租赁业务、皇氏集团风险提示、宝鹰股份异动公告 → 纯情绪高位股集体跌停,跌停数由4只扩至13只,资金加速撤离无基本面支撑的题材炒作。</li>
  </ol>
  
  <div class="quote">
    <b>归因判断:</b> 光通信/CPO主线由产业消息(旭创入股中石科技)+中报业绩(太辰光/华工科技)+外围AI行情三重催化启动,属于消息催化叠加业绩验证的产业行情,非纯资金接力;医药为出海+业绩基本面驱动;稀土为中报+整合预期。高位题材杀跌为纯情绪退潮,与消息面无关。指数层面逻辑未变:缩量震荡修复,结构上资金明确向"有催化、有业绩"的算力链与医药集中,但增量缺席,主线持续性待次日承接验证。
  </div>
</div>
'''
    
    # 保存并返回长度
    with open('/root/web_reports/report_20260814_full_editorial.html', 'w', encoding='utf-8') as f:
        f.write(html)
        # 后续模块待续...
        f.write('\n<!-- 模块1-6待续... -->\n')
        f.write('</div>\n')
        f.write('<div class="footer"><div class="container">免责声明: 以上分析基于公开数据,不构成投资建议。市场有风险,投资需谨慎。</div></div>\n')
        f.write('</body>\n</html>\n')
    
    print(f"✓ 阶段1完成 (前置+模块0消息面)")
    print(f"✓ 已保存到 /root/web_reports/report_20260814_full_editorial.html")
    return len(html)

if __name__ == '__main__':
    size = build_html()
    print(f"✓ 当前长度: {size} 字符")
