from pathlib import Path
from shutil import copy2
from openpyxl import load_workbook
from openpyxl.styles import Alignment, Border, Font, PatternFill, Side
from openpyxl.utils import get_column_letter

ROOT = Path(__file__).resolve().parent
SCREEN = ROOT / "screenshots"
SOURCES = [
    Path("/Users/jack/Library/Containers/com.tencent.WeWorkMac/Data/Documents/Profiles/A74DF84611CC2ED79C4C206E40B5D80E/Caches/Files/2026-07/7c8405bd6be9f422479da1f36f67c9f0/【更新】智慧食堂标准产品20260703.xlsx"),
    Path("/Users/jack/Library/Containers/com.tencent.WeWorkMac/Data/Documents/Profiles/A74DF84611CC2ED79C4C206E40B5D80E/Caches/Files/2026-07/eaeccd6cfce5308a8d224088b910fa87/智慧食堂标准产品清单20260703.xlsx"),
]

rows = [
    [1, "个人健康档案（基础信息、疾病史、运动习惯、过敏/忌口、饮食偏好）", "部分完成（页面字段存在，业务联调未验）", "Excel 手机端第 5 行第 3 项；store 人员资料页：integratedManagement/eRecord/basicInfo.vue；本次截图：after-latest-homeMain.png"],
    [2, "膳食记录与营养分析（手动/设备录入、单餐分析、热量和营养素）", "部分完成（页面已验证，测试数据为空）", "Excel 手机端第 5 行第 4–6 项；store 路由：#/dietaryMonitoring/personalMonitor；截图：after-latest-dietary-monitoring.png、after-latest-dietary-survey.png"],
    [3, "AI 营养问答与个性化建议（文字提问、功能入口、订单/人员查询）", "已验证（页面可达；AI 回答接口未验）", "store 路由：#/agentAssistant；截图：after-latest-ai-assistant.png；源码：public/static/src/view/agentAssistant/index.vue"],
    [4, "体重与运动目标追踪（目标体重、体脂、能量平衡、趋势）", "已验证（页面可达；测试数据为空）", "Excel 手机端第 5 行第 7–8 项；store 路由：#/yingyangpinggu/weightManagement；截图：after-latest-weight-management.png；源码：public/static/src/view/yingyangpinggu/weightManagement.vue"],
]

before_after = [
    [1, "AI 营养助手入口", "screenshots/before-docker-ai-assistant.png", "screenshots/after-latest-ai-assistant.png", "两张图均为 1280×577；最新隔离构建使用测试登录响应进入页面。"],
    [2, "膳食监控列表", "screenshots/before-docker-dietary-monitoring.png", "screenshots/after-latest-dietary-monitoring.png", "同一路由、同一视口；当前没有测试人员数据，保留空态。"],
    [3, "体重管理列表", "screenshots/before-docker-weight-management.png", "screenshots/after-latest-weight-management.png", "同一路由、同一视口；可看到体重、体脂、能量平衡字段。"],
]

thin = Side(style="thin", color="D9E2F3")
header_fill = PatternFill("solid", fgColor="1F4E78")
header_font = Font(name="微软雅黑", size=11, bold=True, color="FFFFFF")
body_font = Font(name="微软雅黑", size=10, color="1F2937")


def style_table(ws, widths):
    ws.freeze_panes = "A2"
    ws.auto_filter.ref = ws.dimensions
    ws.row_dimensions[1].height = 28
    for cell in ws[1]:
        cell.fill = header_fill
        cell.font = header_font
        cell.alignment = Alignment(horizontal="center", vertical="center", wrap_text=True)
        cell.border = Border(top=thin, bottom=thin, left=thin, right=thin)
    for row in ws.iter_rows(min_row=2):
        for cell in row:
            cell.font = body_font
            cell.alignment = Alignment(vertical="top", wrap_text=True)
            cell.border = Border(top=thin, bottom=thin, left=thin, right=thin)
    for idx, width in enumerate(widths, start=1):
        ws.column_dimensions[get_column_letter(idx)].width = width


def link_cell(cell, relpath):
    cell.hyperlink = relpath
    cell.style = "Hyperlink"


for source in SOURCES:
    output = ROOT / f"{source.stem}_四列验收版.xlsx"
    copy2(source, output)
    wb = load_workbook(output)
    if "四列验收清单" in wb.sheetnames:
        del wb["四列验收清单"]
    ws = wb.create_sheet("四列验收清单")
    ws.append(["序号", "功能需求名称", "是否完成", "证据"])
    for row in rows:
        ws.append(row)
    style_table(ws, [8, 48, 28, 88])
    for cell in ws["D"][1:]:
        cell.alignment = Alignment(vertical="top", wrap_text=True)

    if "Before-After" in wb.sheetnames:
        del wb["Before-After"]
    ba = wb.create_sheet("Before-After")
    ba.append(["序号", "功能需求名称", "Before", "After", "说明"])
    for row in before_after:
        ba.append(row)
    style_table(ba, [8, 34, 48, 48, 62])
    for row_idx in range(2, ba.max_row + 1):
        link_cell(ba.cell(row_idx, 3), ba.cell(row_idx, 3).value)
        link_cell(ba.cell(row_idx, 4), ba.cell(row_idx, 4).value)
    wb.save(output)
    print(output)
