#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from docx import Document
from docx.shared import Pt, Inches, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.oxml.ns import qn

SRC = '/tmp/report.docx'
OUT = '/home/mi/.openclaw/workspace/2026年泰语1培训总结报告（含统计图）.docx'
IMG = '/home/mi/.openclaw/workspace'

ACCENT = RGBColor(0x0E, 0x74, 0x90)
GRAY = RGBColor(0x66, 0x66, 0x66)

doc = Document(SRC)

def set_ea(run, ea='微软雅黑'):
    run.font.name = 'Calibri'
    run._element.get_or_add_rPr().get_or_add_rFonts().set(qn('w:eastAsia'), ea)

def find_para(substr):
    for p in doc.paragraphs:
        if substr in p.text:
            return p
    raise RuntimeError(f"anchor not found: {substr}")

def build_blocks(blocks):
    """blocks: list of (kind, payload, width). kind in {image, caption, heading}; width only for image"""
    out = []
    for item in blocks:
        kind = item[0]
        payload = item[1]
        width = item[2] if len(item) > 2 else Inches(6.0)
        p = None
        if kind == 'image':
            p = _mk_par()
            run = p.add_run()
            run.add_picture(payload, width=width)
        elif kind == 'caption':
            p = _mk_par()
            p.alignment = WD_ALIGN_PARAGRAPH.CENTER
            r = p.add_run(payload)
            r.font.size = Pt(9)
            r.font.color.rgb = GRAY
            set_ea(r)
        elif kind == 'heading':
            p = _mk_par()
            r = p.add_run(payload)
            r.font.size = Pt(11)
            r.font.bold = True
            r.font.color.rgb = ACCENT
            set_ea(r)
        if p is not None:
            out.append(p)
    return out

def _mk_par():
    return doc.add_paragraph()

# 把整块内容按顺序插到 anchor 之前（addprevious 每次插到 anchor 紧前，顺序迭代即可）
def insert_before(anchor, blocks):
    for p in blocks:
        anchor._p.addprevious(p._p)

# ---- 图表 1-3：插到「本期泰语1班培训累计实际参训669次」之前（即考勤表之后）----
anchor_stats = find_para('本期泰语 1 班培训累计实际参训')
blocks_att = [
    ('heading', '各部门参训考勤统计图'),
    ('image', f'{IMG}/01_出勤率对比.png'),
    ('caption', '图1：各部门实际出勤率对比（2025 vs 2026）'),
    ('image', f'{IMG}/02_出勤率提升幅度.png'),
    ('caption', '图2：出勤率提升幅度排行'),
    ('image', f'{IMG}/03_应出勤vs实际出勤.png'),
    ('caption', '图3：2026 年应出勤 vs 实际出勤'),
]
insert_before(anchor_stats, build_blocks(blocks_att))

# ---- 图表 4：插到「三、优秀学员情况」之前（即满意度段落之后）----
anchor_stu = find_para('三、优秀学员情况')
blocks_sat = [
    ('image', f'{IMG}/04_满意度分析.png', Inches(4.2)),
    ('caption', '图4：学员满意度调查（回收问卷 19 份，整体满意度 100%）'),
]
insert_before(anchor_stu, build_blocks(blocks_sat))

doc.save(OUT)
print("saved:", OUT)
