"""Large black type, high-resolution user guide; preserve original v1."""
from pathlib import Path
from io import BytesIO
from zipfile import ZipFile
import json
from reportlab.pdfgen import canvas
from reportlab.lib.colors import HexColor
from reportlab.lib.utils import ImageReader
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont

ROOT=Path(__file__).resolve().parents[2]
OUT=ROOT/'outputs/presales-ticket-flow-20260920/user-guide-v3'
OUT.mkdir(parents=True,exist_ok=True)
PDF=OUT/'项目支持工单-大字清晰版.pdf'
W,H=595.276,841.89
pdfmetrics.registerFont(TTFont('Strong','/System/Library/Fonts/STHeiti Medium.ttc',subfontIndex=0))
c=canvas.Canvas(str(PDF),pagesize=(W,H));c.setTitle('项目支持工单 大字使用说明')
c.setAuthor('康比特数字体育科技')
records=[]
BLACK='#10262C';TEAL='#075B62';ORANGE='#C64717'

def text(s,x,y,size=14,color=BLACK):
    width=pdfmetrics.stringWidth(s,'Strong',size)
    assert x+width<W-23,(s,width,x)
    assert 0<y<H-size-8,(s,y)
    c.setFont('Strong',size);c.setFillColor(HexColor(color));c.drawString(x,H-y-size,s)
    records.append({'text':s,'size':size,'x':x,'top':y,'width':width})

def box(x,y,w,h,fill,r=5):
    c.setFillColor(HexColor(fill));c.roundRect(x,H-y-h,w,h,r,fill=1,stroke=0)

def heading(n,s,y):
    box(28,y,25,25,TEAL)
    text(n,32,y+5,13,'#FFFFFF');text(s,65,y+2,18)

def down(y):
    c.setStrokeColor(HexColor(TEAL));c.setLineWidth(1.5)
    c.line(48,H-y,48,H-y-6);c.line(45,H-y-3,48,H-y-6);c.line(51,H-y-3,48,H-y-6)

with ZipFile(ROOT/'outputs/presales-ticket-flow-20260920/template/reference.docx') as z:
    c.drawImage(ImageReader(BytesIO(z.read('word/media/image1.png'))),28,H-40,width=100,height=15.56,mask='auto')
text('项目支持工单 · 使用说明',28,57,27)
box(28,104,539,49,'#E5F1F0')
text('企业微信 → 工作台 → 审批 → 发起申请',40,111,13.5,TEAL)
text('选择「项目支持工单（2026版）」',40,132,13.5,TEAL)

heading('01','这些事，都可以提单',172)
rows=[('试用技术','账号试用、系统部署、接口/定制评估'),
      ('需求方案','需求确认、方案资料、配置报价/投标'),
      ('现场设备','勘察、图纸、演示、设备借用、转实施交接')]
for i,(label,desc) in enumerate(rows):
    y=208+i*27
    text(label,29,y,14,TEAL);text(desc,101,y,13.5)

heading('02','必填5项，照着写',305)
fields=[('项目名称','写客户和项目名称'),('支持事项','选择本次需要的支持'),
        ('需求说明','现状是什么，需要什么帮助'),('预期成果','要交什么：方案、图纸、账号或评估结论'),
        ('期望完成时间','填具体日期和时间')]
for i,(label,desc) in enumerate(fields):
    y=341+i*25
    if i%2==0:box(28,y-3,539,25,'#F0F4F4',r=0)
    text(label,36,y,13.5);text(desc,163,y,12.5)
text('有附件就上传；涉及费用、资源，请写清。',29,470,12.5)
text('试用或借设备，还要填写截止日期。',29,490,13,TEAL)

box(28,517,539,65,'#FFF0E6')
text('示例：某客户餐厅｜现场勘察',40,523,13,ORANGE)
text('需求：请协助查看设备安装位置和网络条件。',40,544,12.5)
text('成果：现场照片＋勘察意见；期望：9月25日17:00。',40,563,12.5)

heading('03','提交后，按这4步处理',602)
for number,y,h in [('1',640,31),('2',681,44),('3',736,31),('4',777,31)]:
    box(28,y,539,h,'#E5F1F0')
    text(number,41,y+7,14,TEAL)
text('业务部门经理审批',71,646,16)
text('数字技术中心&交付实施部',71,683,15.5)
text('技术部门审批',71,704,13.5)
text('朱总审批',71,742,16)
text('产品、交付办理',71,783,16)
for y in [673,727,769]:down(y)
text('看进度：审批 → 已提交；收到成果后反馈是否满足需求。',29,819,11.5)
c.showPage();c.save()
(OUT/'layout-check.json').write_text(json.dumps({'pages':1,'font':'embedded STHeiti Medium','primary_body_pt':'12.5–16','text':records},ensure_ascii=False,indent=2)+'\n')
print(PDF)
