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-006"


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 -> 产品管理 -> 产品解决方案 -> 编辑 -> 步骤2版本管理 -> 编辑版本",
    lines(
        [
            "管理员账号已登录 SaaS-admin",
            "目标产品已完成打包，打包应用可在版本编辑的可选应用版本中出现",
            "目标产品存在可编辑的订阅版本",
        ]
    ),
    "目标产品：已打包应用的产品；目标订阅版本：任意可编辑版本；目标应用：从打包应用中选择；目标应用版本：弹窗中选择一个启用版本",
    lines(
        [
            "进入产品管理-产品解决方案",
            "定位目标产品并点击编辑",
            "在步骤1基础信息中不做或少量修改，点击下一步",
            "进入步骤2版本管理",
            "点击目标订阅版本的编辑",
            "在编辑订阅版本弹窗中定位应用版本配置区域",
            "在右侧可选应用版本中找到已打包应用",
            "点击该应用的添加",
            "在选择应用版本弹窗中选择一个应用版本",
            "点击确认添加",
            "确认该应用进入左侧已选应用版本区域",
            "点击保存版本",
            "回到步骤2版本管理列表，确认目标订阅版本应用数更新",
            "点击完成并返回产品解决方案列表",
            "进入产品管理-操作日志，目标类型选择“产品”，目标编码输入该产品编号，点击查询",
        ]
    ),
    lines(
        [
            "可选应用版本中展示此前产品打包加入的应用",
            "点击添加后弹出选择应用版本弹窗",
            "确认添加后，该应用出现在已选应用版本区域",
            "保存版本成功",
            "步骤2版本列表中目标版本的应用数随添加结果更新",
            "完成后返回产品解决方案列表",
            "操作日志列表存在操作信息为“编辑产品版本”的成功记录；目标编码与产品编号一致，操作人和提交时间有值",
        ]
    ),
    "自动化可复用产品打包流程产出的应用编码和应用名称。建议封装 edit_product_version、add_packed_app_to_version、select_app_version、assert_product_operation_log。",
    "用户实走截图展示：编辑订阅版本 -> 可选应用版本中点击添加 -> 选择应用版本弹窗 -> 确认添加 -> 已选应用版本出现应用 -> 保存版本。",
]


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)
        row_index = ws.max_row
    else:
        row_index = existing_row
        for column, value in enumerate(ROW, 1):
            ws.cell(row_index, column).value = value

    for cell in ws[row_index]:
        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()
