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 = "流程用例-产品解决方案"
CASE_ID = "PRODSOL-FLOW-005"


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


ROW = [
    CASE_ID,
    "产品管理-产品解决方案",
    "从应用列表随机选择应用编码并完成产品打包",
    "P0",
    "SaaS-admin -> 应用管理 -> 应用列表新；SaaS-admin -> 产品管理 -> 产品解决方案 -> 打包",
    lines(
        [
            "管理员账号已登录 SaaS-admin",
            "应用列表新中至少存在 5 个可用于打包的应用",
            "产品解决方案列表中存在目标产品，且操作区存在打包入口",
        ]
    ),
    "应用编码：从应用列表新随机选择 5-10 个应用编码；目标产品：新建产品或待打包产品",
    lines(
        [
            "进入应用管理-应用列表新",
            "从应用列表中随机选择 5-10 个应用，记录应用编码",
            "进入产品管理-产品解决方案",
            "定位目标产品并点击打包",
            "在产品打包弹窗的输入应用编码框中输入第 1 个应用编码并搜索",
            "点击该应用的添加",
            "重复输入和添加步骤，直到 5-10 个应用全部加入右侧已选应用",
            "核对右侧已选应用列表",
            "点击确定",
            "重新打开目标产品的打包弹窗或查看列表状态进行回读",
        ]
    ),
    lines(
        [
            "应用列表可成功获取 5-10 个应用编码",
            "每个应用编码输入后，左侧可搜索到对应应用",
            "点击添加后，该应用进入右侧已选应用列表",
            "右侧已选应用数量与本次添加数量一致",
            "点击确定后产品打包保存成功",
            "重新进入打包弹窗后，已选应用可回读或产品打包结果可在页面中体现",
        ]
    ),
    "自动化脚本不要写死应用编码；先从应用列表采集候选编码，再随机抽取 5-10 个用于产品打包。建议封装 collect_app_codes、open_product_pack、add_app_by_code、assert_selected_apps。",
    "用户实走截图展示产品打包弹窗：输入应用编码、搜索结果中的添加按钮、右侧已选应用、确定按钮。",
]


def main() -> None:
    wb = load_workbook(EXCEL_PATH)
    ws = wb[SHEET_NAME]
    existing_row = None
    for index in range(2, ws.max_row + 1):
        if ws.cell(index, 1).value == CASE_ID:
            existing_row = index
            break

    if existing_row is None:
        ws.append(ROW)
        target_row = ws.max_row
    else:
        target_row = existing_row
        for column, value in enumerate(ROW, 1):
            ws.cell(target_row, column).value = value

    for cell in ws[target_row]:
        cell.alignment = Alignment(vertical="top", wrap_text=True)

    wb.save(EXCEL_PATH)
    print(f"updated={EXCEL_PATH}")
    print(f"case={CASE_ID}")


if __name__ == "__main__":
    main()
