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


def replace_log_tail(value: str | None, new_tail: str) -> str:
    text = value or ""
    marker = "操作日志收尾："
    if marker in text:
        return text.split(marker, 1)[0].rstrip() + "\n" + new_tail
    return f"{text}\n{new_tail}".strip()


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

        ws.cell(row_index, 8).value = replace_log_tail(
            ws.cell(row_index, 8).value,
            "操作日志收尾：进入产品管理-操作日志，目标类型选择“产品”，目标编码输入本次新建产品的产品编号，点击查询；确认同一产品编号下存在“新建产品”和“新建产品版本”两条操作信息。",
        )
        ws.cell(row_index, 9).value = replace_log_tail(
            ws.cell(row_index, 9).value,
            "操作日志收尾：列表存在操作信息为“新建产品”的成功记录；同时存在操作信息为“新建产品版本”的成功记录；两条记录的目标编码均与新建产品编号一致，目标名称与新建产品名称一致，操作人和提交时间有值。",
        )
        ws.cell(row_index, 10).value = (
            "完整新增产品主流程，可直接作为自动化主用例。\n"
            "新建产品流程以操作日志作为最终落库断言；建议保存列表回读到的产品编号，再调用两次日志断言："
            "assert_operation_log(target_type='产品', target_code=product_code, operation_info='新建产品')；"
            "assert_operation_log(target_type='产品', target_code=product_code, operation_info='新建产品版本')。"
        )
        for cell in ws[row_index]:
            cell.alignment = Alignment(vertical="top", wrap_text=True)
        break

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


if __name__ == "__main__":
    main()
