from pathlib import Path
import importlib.util,json,shutil
from reportlab.pdfgen import canvas
from pdf2image import convert_from_path

HERE=Path(__file__).resolve().parent;ROOT=HERE.parents[6]
OUT=ROOT/'oss/local-deliverables/2026-09-24-AI智慧健康站软硬一体版'
spec=importlib.util.spec_from_file_location('ui',HERE.parent/'v5/build.py')
ui=importlib.util.module_from_spec(spec);spec.loader.exec_module(ui)
DATA=json.loads((HERE/'content.json').read_text())
W,H=ui.W,ui.H

def arrow(s,x1,y,x2):
 s.line(x1,y,x2,y,'#4289D9');s.line(x2-5,y-3,x2,y,'#4289D9');s.line(x2-5,y+3,x2,y,'#4289D9')

def page(d):
 p=OUT/'01-软硬一体图文版'/f'{d["file"]}_软硬一体版.pdf';p.parent.mkdir(exist_ok=True)
 c=canvas.Canvas(str(p),pagesize=(W,H),initialFontName='YaHei',initialFontSize=10);s=ui.Surface(c,H)
 c.setTitle('康比特AI智慧健康站 '+d['file']+' 软硬一体版');c.setAuthor('康比特')
 s.rect(0,0,W,H,'#FFFFFF');s.image(OUT/'assets/cpt-logo.png',32,25,98,15.24)
 s.text('康比特AI智慧健康站',342,25,222,10,ui.INK,True,align=2)
 s.text('健康体测一体机 + AI运动营养师'+(' · 渠道合作' if d['id']=='02' else ''),32,61,531,10,ui.GRAY)
 title='从现场体测，\n到每天的AI运动营养服务。' if d['id']=='01' else '软硬一体，\n把检测与日常服务一起交付。'
 s.text(title,32,89,531,26,ui.INK,True,leading=36)
 subtitle='一体机采集身体数据，小程序承接档案、建议与吃动记录。' if d['id']=='01' else '同一套方案，看得到设备，也看得到手机端的实际服务内容。'
 s.text(subtitle,32,174,531,11,ui.GRAY)
 s.image(OUT/'generated/hardware-left-stage.png',0,214,W,W*2/3)
 s.text('同一小程序 · 健康档案与AI服务',207,217,357,9.5,'#2A70BE',True,align=1)
 ui.phone(s,ui.screen_archive,207,237,162)
 ui.phone(s,ui.screen_ai,402,237,162)
 s.text('本人关联',148,392,49,7.5,'#2A70BE',True,align=1)
 arrow(s,143,412,198);arrow(s,377,412,393)
 for x,w,title,desc in [(25,157,'健康体测一体机','身高 · 体重 · 血压 · 体成分'),(202,172,'健康档案','身体指标 · 热量摄入/消耗'),(397,177,'AI运动营养师','饮食问答 · 目标与训练卡')]:
  s.text(title,x,620,w,11,ui.INK,True,align=1)
  s.text(desc,x,641,w,8.1,ui.GRAY,align=1)
 s.rect(32,674,531,55,'#F0F6FC',8)
 s.text('测量建档  →  本人关联  →  AI建议与吃动记录  →  复测沟通',45,682,505,10.2,'#1F65AA',True,align=1)
 detail='设备采集身体数据，小程序提供问答、档案查看和吃动记录入口。' if d['id']=='01' else '设备用于现场演示，小程序展示后续服务；按真实场景确定交付与运营分工。'
 s.text(detail,45,708,505,8.4,ui.GRAY,align=1)
 s.text('营养垂类大模型  |  25年专业积累 · 100支国家队服务经验',32,748,531,9.6,ui.BLUE,True)
 support='百款硬件及华为运动健康、苹果健康生态连接，按支持清单与用户授权接入。' if d['id']=='01' else '设备销售 + 营养品复购  |  健身瑜伽 · 健康管理 · 企业员工福利'
 s.text(support,32,771,531,8.3,ui.GRAY)
 s.line(32,796,563,796)
 s.text(d['note'],32,805,531,6.7,ui.GRAY,leading=9)
 c.showPage();c.save();convert_from_path(str(p),dpi=200)[0].save(p.with_suffix('.png'));print(p)

def main():
 (OUT/'assets').mkdir(parents=True,exist_ok=True)
 previous=ROOT/'oss/local-deliverables/2026-09-24-AI运动营养师小程序页面版/assets'
 for name in ['cpt-logo.png','ai-male-bulking.png']:shutil.copy2(previous/name,OUT/'assets'/name)
 ui.OUT=OUT
 for d in DATA:page(d)
 spec=importlib.util.spec_from_file_location('v2',HERE.parent/'v2/build.py');v2=importlib.util.module_from_spec(spec);spec.loader.exec_module(v2)
 v2.OUT=OUT/'02-纯文字与可编辑版';v2.QA=v2.OUT/'qa';v2.HERE=HERE;v2.DATA=DATA;v2.QA.mkdir(parents=True,exist_ok=True);v2.build_text()

if __name__=='__main__':main()
