from __future__ import annotations

import json
from pathlib import Path


ROOT = Path(__file__).resolve().parents[1]
OUTPUT = ROOT / "runtime" / "split_settle_config_update.json"


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


def row(
    case_id: str,
    level: str,
    source: str,
    module: str,
    title: str,
    login: str,
    precondition: str,
    data: str,
    action_steps: list[str],
    expected: str,
    assertion: str,
    relation: str,
    status: str = "待自动化",
    remark: str = "",
) -> list[str]:
    return [
        case_id,
        level,
        source,
        module,
        title,
        login,
        precondition,
        data,
        steps(action_steps),
        expected,
        assertion,
        relation,
        status,
        remark,
    ]


payload = {
    "delete_case_ids": ["B-SETTLE-CONFIG-001"],
    "case_updates": [
        row(
            "B-SETTLE-PAYCENTER-001",
            "分支小用例",
            "两段线上打款配置前置；如交易应用/交易通道/账号配置缺失则先执行",
            "支付中心配置",
            "支付中心配置交易应用、交易通道和账号配置",
            "丸友集：主账号；丸掌柜：主账号；账号需具备支付中心配置权限。",
            "丸友集、丸掌柜主账号可登录；支付中心可访问；交易应用、交易通道、账号配置资料已准备。",
            "应用名称、应用编码、回调地址、通道编码、通道名称、业务类型、支付方式、账号编码、账号名称、支付应用ID、密钥、证书配置。",
            [
                "登录丸友集或丸掌柜主账号。",
                "进入丸游管理后台。",
                "切换到需要配置的应用入口，例如丸友集或丸掌柜。",
                "在左侧菜单展开支付中心。",
                "进入支付中心-交易应用。",
                "点击新增或编辑目标交易应用。",
                "填写应用名称、应用编码、回调地址和状态。",
                "保存交易应用配置。",
                "回到交易应用列表，按应用编码查询并确认状态为启用。",
                "进入支付中心-交易通道。",
                "点击创建或编辑目标交易通道。",
                "选择刚配置的交易应用。",
                "填写通道编码、通道名称、业务类型、支付方式、排序和状态。",
                "保存交易通道配置。",
                "回到交易通道列表，按通道编码查询并确认状态为启用。",
                "进入支付中心-账号配置。",
                "点击新增或编辑支付应用配置。",
                "填写编码、名称、显示名称、账号名称、账号号、支付方式、支付应用ID。",
                "填写支付宝支付配置、接口密钥、公钥、应用公钥证书、支付宝公钥证书、支付宝根证书等页面要求字段。",
                "保存账号配置。",
                "回到账号配置列表，按编码或名称查询并确认配置可用。",
                "如丸友集和丸掌柜需要分别配置，切换应用后重复交易应用、交易通道、账号配置三段配置。",
                "确认支付中心三类配置完成后，再执行丸友集或丸掌柜的线上打款配置用例。",
            ],
            "支付中心交易应用、交易通道、账号配置均已保存并启用；后续线上打款配置具备支付基础资料。",
            "交易应用、交易通道、账号配置三处列表状态均为启用；应用编码、通道编码、账号配置与后续线上打款配置引用一致。",
            "B-SETTLE-WYJ-ONLINE-PAY-CONFIG-001、B-SETTLE-WZG-ONLINE-PAY-CONFIG-001前置",
            "已自动化",
            "对应 test_e2e_settle_paycenter_001_payment_center_config.py。",
        ),
        row(
            "B-SETTLE-WYJ-ONLINE-PAY-CONFIG-001",
            "分支小用例",
            "1级-2级结算：A-DELIVERY-002之后；B-SETTLE-WANYOUJI-PAY-001之前",
            "丸友集给打手打款配置",
            "丸友集结算账单列表配置线上打款账户",
            "丸友集：工作室主账号。",
            "打手完成订单并提交验收；丸友集已确认验收；丸友集主账号可进入工作室基础应用-财务结算列表；如无可用交易应用、交易通道或账号配置，先执行B-SETTLE-PAYCENTER-001。",
            "丸友集商家支付账户、交易应用、交易通道、账号配置、打款账户名称、商户号/账号号。",
            [
                "先执行用例A-DELIVERY-002，丸友集确认验收打手子单并产生打手收入。",
                "登录丸友集工作室主账号。",
                "进入工作室基础应用-财务结算列表。",
                "进入结算账单列表。",
                "点击线上打款配置。",
                "检查弹窗或配置页中是否存在可用交易应用、交易通道和账号配置。",
                "如不存在可用交易应用、交易通道或账号配置，先执行用例B-SETTLE-PAYCENTER-001，完成支付中心-交易应用、交易通道和账号配置。",
                "回到工作室基础应用-财务结算列表-结算账单列表。",
                "再次进入线上打款配置。",
                "选择或新增丸友集的商家支付账户。",
                "选择对应交易应用、交易通道和账号配置。",
                "填写线上打款账户名称、商户号/账号号、支付方式、状态等页面必填项。",
                "保存线上打款配置。",
                "返回结算账单列表，确认线上打款配置已启用且不再提示缺少配置。",
                "继续执行用例B-SETTLE-WANYOUJI-PAY-001，丸友集审核处理打手账单并给打手打款。",
            ],
            "丸友集侧线上打款配置可用；丸友集后续可对打手结算账单进行线上打款。",
            "丸友集线上打款配置、支付中心交易应用/通道/账号配置、结算账单列表打款前置校验一致。",
            "被F-SETTLE-CONFIG-001、F-SETTLE-PAY-001、F-SETTLE-L1L2-001引用",
            "已自动化",
            "对应 test_e2e_settle_config_001_merchant_payment_config.py；当前脚本覆盖丸友集商家打款配置线。",
        ),
        row(
            "B-SETTLE-WZG-ONLINE-PAY-CONFIG-001",
            "分支小用例",
            "2级-3级结算：B-SETTLE-WYJ-APPLY-001之后；B-SETTLE-WZG-TO-WYJ-PAY-001之前",
            "丸掌柜给丸友集打款配置",
            "丸掌柜结算账单配置线上打款账户",
            "丸掌柜：企业主账号；丸友集：工作室主账号（用于发起上游结算申请）。",
            "丸友集已在结算中心-结算账单-丸友集中提交让丸掌柜打款的申请；丸掌柜主账号可进入结算中心-结算账单-丸掌柜；如无可用交易应用、交易通道或账号配置，先执行B-SETTLE-PAYCENTER-001。",
            "丸掌柜商家支付账户、交易应用、交易通道、账号配置、丸友集结算账单号、打款账户名称、商户号/账号号。",
            [
                "先执行用例B-SETTLE-WYJ-APPLY-001，丸友集在结算中心-结算账单-丸友集中提交让丸掌柜打款的申请。",
                "登录丸掌柜主账号。",
                "进入结算中心。",
                "进入结算账单-丸掌柜。",
                "按丸友集工作室、业务单号或结算账单号查询目标账单。",
                "点击线上打款配置。",
                "检查弹窗或配置页中是否存在可用交易应用、交易通道和账号配置。",
                "如不存在可用交易应用、交易通道或账号配置，先执行用例B-SETTLE-PAYCENTER-001，完成支付中心-交易应用、交易通道和账号配置。",
                "回到结算中心-结算账单-丸掌柜。",
                "再次进入线上打款配置。",
                "选择或新增丸掌柜的商家支付账户。",
                "选择对应交易应用、交易通道和账号配置。",
                "填写线上打款账户名称、商户号/账号号、支付方式、状态等页面必填项。",
                "保存线上打款配置。",
                "返回结算账单-丸掌柜，确认线上打款配置已启用且不再提示缺少配置。",
                "继续执行用例B-SETTLE-WZG-TO-WYJ-PAY-001，丸掌柜处理给丸友集的结算打款。",
            ],
            "丸掌柜侧线上打款配置可用；丸掌柜后续可对丸友集结算账单进行线上打款。",
            "丸掌柜线上打款配置、支付中心交易应用/通道/账号配置、结算账单-丸掌柜打款前置校验一致。",
            "被F-SETTLE-CONFIG-001、F-SETTLE-PAY-002、F-SETTLE-L2L3-001引用",
            "待自动化",
            "按用户补充拆分；待补丸掌柜侧独立自动化脚本。",
        ),
    ],
    "flow_updates": [
        row(
            "F-SETTLE-CONFIG-001",
            "组合流程用例",
            "B-SETTLE-PAYCENTER-001 -> B-SETTLE-WYJ-ONLINE-PAY-CONFIG-001 -> B-SETTLE-WZG-ONLINE-PAY-CONFIG-001 -> B-SETTLE-PLAYER-ACCOUNT-001",
            "结算配置流程",
            "支付中心基础配置、两段线上打款配置和打手账户配置流程",
            "丸友集：工作室主账号；丸掌柜：企业主账号；打手应用：打手子账号。",
            "丸友集、丸掌柜、打手账号均可登录；支付中心、结算账单、打手收入入口可访问。",
            "交易应用、交易通道、账号配置、丸友集线上打款账户、丸掌柜线上打款账户、打手收款账户。",
            [
                "如丸友集或丸掌柜线上打款配置中不存在可用交易应用，先执行用例B-SETTLE-PAYCENTER-001。",
                "执行用例B-SETTLE-WYJ-ONLINE-PAY-CONFIG-001，完成丸友集给打手打款前的线上打款配置。",
                "执行用例B-SETTLE-WZG-ONLINE-PAY-CONFIG-001，完成丸掌柜给丸友集打款前的线上打款配置。",
                "执行用例B-SETTLE-PLAYER-ACCOUNT-001，确认或完善打手打款账户信息。",
                "进入丸友集-工作室基础应用-财务结算列表-结算账单列表，确认丸友集线上打款配置可用。",
                "进入丸掌柜-结算中心-结算账单-丸掌柜，确认丸掌柜线上打款配置可用。",
                "进入打手应用-我的收入，确认一键结算入口可用，且不再提示账户未完善。",
            ],
            "丸友集给打手打款、丸掌柜给丸友集打款、打手收款账户三类结算前置均可用。",
            "支付中心基础配置、丸友集线上打款配置、丸掌柜线上打款配置、打手账户状态与后续打款前置校验一致。",
            "组合举证：支付中心基础配置 -> 丸友集线上打款配置 -> 丸掌柜线上打款配置 -> 打手账户配置",
            "待自动化",
            "由原B-SETTLE-CONFIG-001拆分后重构。",
        )
    ],
    "replacements": [
        {
            "old": "B-SETTLE-CONFIG-001",
            "new": "B-SETTLE-WYJ-ONLINE-PAY-CONFIG-001（丸友集结算账单列表配置线上打款账户）或B-SETTLE-WZG-ONLINE-PAY-CONFIG-001（丸掌柜结算账单配置线上打款账户）",
        },
        {
            "old": "商户支付配置和打手打款账户完善流程",
            "new": "两段线上打款配置和打手打款账户完善流程",
        },
    ],
}

OUTPUT.parent.mkdir(parents=True, exist_ok=True)
OUTPUT.write_text(json.dumps(payload, ensure_ascii=False, indent=2), encoding="utf-8")
print(OUTPUT)
