#!/usr/bin/env python3
"""批量保护 generate_report_v6.py 中未防护的 .toFixed 调用
   X.toFixed(N) → (X||0).toFixed(N)
   已有保护（接收者以 ) 结尾）的不会重复处理
"""
import re, sys

SRC = "/Users/jugelizi/hftrading/mac-mini-deploy/trading_dashboard_source/generate_report_v6.py"
with open(SRC, encoding="utf-8") as f:
    code = f.read()

# 匹配: 标识符/属性链 .toFixed(  ，前面不能是 ) 或数字后空格等
# 排除: 已经被括号包裹的 (xxx).toFixed、函数调用结尾 xxx().toFixed
pattern = re.compile(r'([A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*)*)\.toFixed\s*\(')

count = 0
skip = 0

def repl(m):
    global count, skip
    expr = m.group(1)
    start = m.start()
    # 检查前面是否已是 ||0) 保护形式
    pre = code[max(0, start-8):start]
    if re.search(r'\|\|\s*0\s*\)$', pre):
        skip += 1
        return m.group(0)
    # 检查前面是否是 "typeof x!=='undefined'&&" 之类（无需处理也行，直接保护更稳）
    count += 1
    return '(' + expr + '||0).toFixed('

new_code = pattern.sub(repl, code)

print(f"保护了 {count} 处 toFixed 调用, 跳过已保护 {skip} 处")

with open(SRC, "w", encoding="utf-8") as f:
    f.write(new_code)

# 验证JS语法（提取生成后的HTML再验，这里先快速统计）
print("剩余未保护:", len(pattern.findall(new_code)) - skip, "（应与skip一致）")
