from pathlib import Path

from docx import Document
from docx.shared import Inches, Pt, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.section import WD_SECTION
from docx.oxml.ns import qn


OUTPUT = str(Path(__file__).with_name("Mac Chrome 网页长截图操作指南.docx"))


def set_run_font(run, name="Hiragino Sans GB", size=11, bold=False):
    run.font.name = name
    run._element.get_or_add_rPr().rFonts.set(qn("w:eastAsia"), name)
    run.font.size = Pt(size)
    run.bold = bold
    run.font.color.rgb = RGBColor(0, 0, 0)


doc = Document()
section = doc.sections[0]
section.page_width = Inches(8.5)
section.page_height = Inches(11)
section.top_margin = Inches(0.8)
section.bottom_margin = Inches(0.8)
section.left_margin = Inches(0.9)
section.right_margin = Inches(0.9)

styles = doc.styles
for style_name, size in [("Normal", 11), ("Title", 24), ("Heading 1", 16), ("Heading 2", 13)]:
    style = styles[style_name]
    style.font.name = "Hiragino Sans GB"
    style._element.rPr.rFonts.set(qn("w:ascii"), "Hiragino Sans GB")
    style._element.rPr.rFonts.set(qn("w:hAnsi"), "Hiragino Sans GB")
    style._element.rPr.rFonts.set(qn("w:eastAsia"), "Hiragino Sans GB")
    style.font.size = Pt(size)
    style.font.color.rgb = RGBColor(0, 0, 0)

styles["Normal"].paragraph_format.space_after = Pt(8)
styles["Normal"].paragraph_format.line_spacing = 1.35
styles["Heading 1"].paragraph_format.space_before = Pt(16)
styles["Heading 1"].paragraph_format.space_after = Pt(8)
title_style_ppr = styles["Title"]._element.get_or_add_pPr()
title_style_border = title_style_ppr.find(qn("w:pBdr"))
if title_style_border is not None:
    title_style_ppr.remove(title_style_border)

title = doc.add_paragraph(style="Title")
title.alignment = WD_ALIGN_PARAGRAPH.CENTER
set_run_font(title.add_run("Mac Chrome 网页长截图操作指南"), size=24, bold=True)
title_ppr = title._element.get_or_add_pPr()
title_border = title_ppr.find(qn("w:pBdr"))
if title_border is not None:
    title_ppr.remove(title_border)

intro = doc.add_paragraph()
intro.alignment = WD_ALIGN_PARAGRAPH.CENTER
set_run_font(intro.add_run("无需安装扩展，使用 Chrome 自带功能保存完整网页"), size=11)

doc.add_heading("最快操作方法", level=1)

steps = [
    ("打开网页", "在 Google Chrome 中打开需要截取的网页。"),
    ("打开开发者工具", "按 ⌥ Option + ⌘ Command + I。"),
    ("打开命令菜单", "按 ⇧ Shift + ⌘ Command + P。"),
    ("搜索截图命令", "输入 screenshot。"),
    ("截取完整网页", "选择 Capture full size screenshot。"),
    ("找到图片", "Chrome 会自动保存 PNG 图片，通常位于“下载”文件夹。"),
]

for index, (heading, detail) in enumerate(steps, 1):
    p = doc.add_paragraph(style="List Number")
    p.paragraph_format.space_after = Pt(7)
    r1 = p.add_run(f"{heading}：")
    set_run_font(r1, bold=True)
    set_run_font(p.add_run(detail))

doc.add_heading("菜单操作方法", level=1)
menu_steps = [
    "点击 Chrome 右上角的三个点。",
    "选择“更多工具”，然后选择“开发者工具”。",
    "点击开发者工具右上角的三个点，选择 Run command。",
    "输入 screenshot，然后选择 Capture full size screenshot。",
]
for item in menu_steps:
    p = doc.add_paragraph(style="List Bullet")
    set_run_font(p.add_run(item))

doc.add_heading("注意事项", level=1)
notes = [
    "这种方式截取的是完整网页内容，不包含 Chrome 地址栏和标签栏。",
    "如果网页会无限加载，请先向下滚动，让需要的内容全部加载完成，再执行截图。",
    "部分带固定悬浮栏或动态内容的网页，截图结果可能出现重复元素。",
    "如果快捷键无效，请确认当前焦点在 Chrome 窗口中，并检查是否有其他软件占用了快捷键。",
]
for item in notes:
    p = doc.add_paragraph(style="List Bullet")
    set_run_font(p.add_run(item))

footer = section.footer.paragraphs[0]
footer.alignment = WD_ALIGN_PARAGRAPH.CENTER
set_run_font(footer.add_run("Mac Chrome 网页长截图操作指南"), size=9)

doc.save(OUTPUT)
print(OUTPUT)
