from __future__ import annotations

from pathlib import Path

from openpyxl import load_workbook
from openpyxl.styles import Alignment


ROOT = Path(__file__).resolve().parents[1]
EXCEL_PATH = ROOT / "测试用例" / "SaaS_订阅邀请登录_测试功能点.xlsx"
SHEET_NAME = "流程用例-产品解决方案"


def lines(items: list[str]) -> str:
    return "\n".join(f"{index}. {item}" for index, item in enumerate(items, 1))


ROWS = [
    [
        "PRODSOL-FLOW-001",
        "产品管理-产品解决方案",
        "新建产品并新增订阅版本后列表回读",
        "P0",
        "SaaS-admin -> 产品管理 -> 产品解决方案 -> 新建产品",
        lines(
            [
                "管理员账号已登录 SaaS-admin",
                "当前用户有新建产品权限",
                "已进入产品解决方案列表",
            ]
        ),
        "产品名称：自动化产品_{时间戳}；提供方类型：平台；Logo：测试图片；产品描述：自动化产品描述；续费提醒：到期提醒；版本名称：自动化订阅版本_{时间戳}；开通方式：订阅开通；状态：启用；基准月份：499；成员限制：80；免费试用天数：0；订阅时长：1/6/12个月；折扣：100/90/80",
        lines(
            [
                "点击右上角“新建产品”",
                "在步骤1基础信息中填写产品基础信息、Logo、允许购买商户类型、续费提醒和提醒时间",
                "点击下一步",
                "确认提示基础信息已保存，并进入步骤2版本管理",
                "点击新增版本",
                "填写订阅版本信息、价格、成员限制、试用天数、订阅时长与折扣",
                "点击保存版本",
                "回到步骤2版本管理列表，确认新版本出现",
                "点击完成",
                "返回产品解决方案列表并查询新建产品",
            ]
        ),
        lines(
            [
                "基础信息保存成功，并进入版本管理",
                "订阅版本保存成功，版本列表出现新建版本",
                "完成后产品出现在产品解决方案列表",
                "新建产品状态为待发布",
                "产品编号自动生成，版本数量随新增版本更新",
            ]
        ),
        "完整新增产品主流程，可直接作为自动化主用例。",
        "由用户实走截图确认：创建产品步骤1基础信息 -> 步骤2版本管理 -> 添加订阅版本 -> 保存版本。",
    ],
    [
        "PRODSOL-FLOW-002",
        "产品管理-产品解决方案",
        "编辑待发布产品并回读列表",
        "P0",
        "SaaS-admin -> 产品管理 -> 产品解决方案 -> 编辑",
        lines(
            [
                "管理员账号已登录 SaaS-admin",
                "存在待发布产品",
            ]
        ),
        "产品描述：自动化编辑描述_{时间戳}",
        lines(
            [
                "进入产品解决方案列表",
                "选择待发布产品点击编辑",
                "修改产品基础信息或版本信息",
                "保存编辑",
                "返回列表查询该产品",
            ]
        ),
        lines(
            [
                "编辑保存成功",
                "列表或详情可回读到更新后的产品信息",
                "产品仍保持可继续发布的状态",
            ]
        ),
        "作为编辑主流程。具体字段不拆，只保留保存和回读。",
        "用户截图展示待发布产品存在编辑入口。",
    ],
    [
        "PRODSOL-FLOW-003",
        "产品管理-产品解决方案",
        "产品状态按待发布、已上架、已下架流转",
        "P0",
        "SaaS-admin -> 产品管理 -> 产品解决方案 -> 发布/下架",
        lines(
            [
                "管理员账号已登录 SaaS-admin",
                "存在配置完整的待发布产品",
            ]
        ),
        "目标产品：配置完整的待发布产品",
        lines(
            [
                "进入产品解决方案列表",
                "确认目标产品初始状态为待发布，操作按钮为发布",
                "点击发布并确认",
                "查询该产品并确认状态变为已上架，操作按钮变为下架",
                "点击下架并确认",
                "再次查询该产品并确认状态变为已下架，操作按钮变为上架",
            ]
        ),
        lines(
            [
                "待发布状态下展示发布按钮",
                "点击发布后状态变为已上架，操作按钮变为下架",
                "点击下架后状态变为已下架，操作按钮变为上架",
                "产品基础数据、版本数量、订阅租户数不被异常清空",
            ]
        ),
        "把发布、下架、上架合成一条完整状态流转自动化主用例。",
        "用户已明确状态规则：待发布 -> 发布 -> 已上架 -> 下架 -> 已下架 -> 上架。",
    ],
    [
        "PRODSOL-FLOW-004",
        "产品管理-产品解决方案",
        "配置产品菜单并重新进入回读",
        "P1",
        "SaaS-admin -> 产品管理 -> 产品解决方案 -> 配置菜单",
        lines(
            [
                "管理员账号已登录 SaaS-admin",
                "目标产品存在配置菜单入口",
            ]
        ),
        "目标菜单：按页面已有菜单资源选择",
        lines(
            [
                "进入产品解决方案列表",
                "点击目标产品配置菜单",
                "选择或调整菜单资源",
                "保存配置",
                "关闭后重新进入配置菜单",
            ]
        ),
        lines(
            [
                "菜单配置保存成功",
                "重新进入后菜单勾选状态与保存结果一致",
                "列表操作入口仍可正常打开",
            ]
        ),
        "这是菜单绑定闭环，用例粒度和应用版本资源绑定保持一致。",
        "用户截图展示产品行存在配置菜单入口。",
    ],
]


def main() -> None:
    wb = load_workbook(EXCEL_PATH)
    ws = wb[SHEET_NAME]
    if ws.max_row > 1:
        ws.delete_rows(2, ws.max_row - 1)
    for row in ROWS:
        ws.append(row)
    for row in ws.iter_rows(min_row=2):
        for cell in row:
            cell.alignment = Alignment(vertical="top", wrap_text=True)
    wb.save(EXCEL_PATH)
    print(f"updated={EXCEL_PATH}")
    print(f"sheet={SHEET_NAME}")
    print(f"cases={len(ROWS)}")


if __name__ == "__main__":
    main()
