from __future__ import annotations

import json
from pathlib import Path


ROOT = Path(__file__).resolve().parents[1]
OUTPUT = ROOT / "runtime" / "merge_settle_config_into_pay_cases.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、密钥、证书配置。",
            [
                "登录丸掌柜主账号。",
                "进入丸掌柜-支付中心-交易应用，新增或编辑交易应用并启用。",
                "进入丸掌柜-支付中心-交易通道，新增或编辑交易通道并启用。",
                "进入丸掌柜-支付中心-账号配置，新增或编辑账号配置并启用。",
                "登录丸友集工作室主账号。",
                "进入丸友集-支付中心-交易应用，新增或编辑交易应用并启用。",
                "进入丸友集-支付中心-交易通道，新增或编辑交易通道并启用。",
                "进入丸友集-支付中心-账号配置，新增或编辑账号配置并启用。",
                "分别回到交易应用、交易通道、账号配置列表，确认配置可查询且状态为启用。",
            ],
            "丸掌柜和丸友集支付中心的交易应用、交易通道、账号配置均可用；后续线上打款配置可直接选择。",
            "两端支付中心配置状态一致；交易应用、交易通道、账号配置可被线上打款配置引用。",
            "B-SETTLE-WANYOUJI-PAY-001、B-SETTLE-WZG-TO-WYJ-PAY-001前置分支",
            "已自动化",
            "对应 test_e2e_settle_paycenter_001_payment_center_config.py。",
        ),
        row(
            "B-SETTLE-WANYOUJI-PAY-001",
            "分支小用例",
            "B-SETTLE-PLAYER-APPLY-001之后；合并丸友集线上打款配置",
            "丸友集给打手打款",
            "丸友集配置线上打款并审核处理打手账单",
            "丸友集：工作室主账号；打手应用：打手子账号。",
            "打手已完成订单；丸友集已确认验收；打手已发起结算账单或丸友集已从员工结算汇总发起账单；丸友集主账号可进入工作室基础应用-财务结算列表。",
            "来源单号、订单标题、打手账号、结算账单号、打手收入金额、丸友集商家支付账户、交易应用、交易通道、账号配置。",
            [
                "先执行用例A-DELIVERY-002，丸友集确认验收打手子单并校验打手收入。",
                "先执行用例B-SETTLE-PLAYER-APPLY-001，打手在我的收入中提交一键结算账单；或执行用例B-SETTLE-WYJ-EMP-BILL-INIT-001，由丸友集在员工结算汇总-账单待发起中发起打手账单。",
                "登录丸友集工作室主账号。",
                "进入工作室基础应用-财务结算列表。",
                "进入结算账单列表。",
                "点击线上打款配置。",
                "检查是否存在可用交易应用、交易通道和账号配置。",
                "如不存在可用交易应用、交易通道或账号配置，先执行用例B-SETTLE-PAYCENTER-001，完成丸友集支付中心基础配置。",
                "回到工作室基础应用-财务结算列表-结算账单列表。",
                "再次进入线上打款配置。",
                "选择或新增丸友集的商家支付账户。",
                "选择对应交易应用、交易通道和账号配置。",
                "填写线上打款账户名称、商户号或账号号、支付方式、状态等页面必填项。",
                "保存线上打款配置。",
                "返回结算账单列表，按结算账单号、来源单号或打手账号查询目标账单。",
                "勾选目标结算账单。",
                "点击批量审核、审核通过或页面实际打款审核按钮。",
                "确认打款信息、打款账户、打款金额和收款人。",
                "提交审核并发起打款。",
                "刷新结算账单列表，确认账单状态变为已打款、已结算或页面实际完成态。",
                "登录打手账号，进入打手应用-我的收入，确认该订单收入状态同步为已结算或已打款。",
            ],
            "丸友集侧先完成线上打款配置，再审核处理打手结算账单并给打手打款；打手侧收入状态同步完成。",
            "丸友集线上打款配置、结算账单金额、打款账户、打手我的收入金额和状态一致。",
            "被F-SETTLE-PAY-001、F-SETTLE-L1L2-001引用",
            "待自动化",
            "按用户补充：丸友集线上打款配置合并到给打手打款用例中。",
        ),
        row(
            "B-SETTLE-WZG-TO-WYJ-PAY-001",
            "分支小用例",
            "B-SETTLE-WYJ-APPLY-001之后；合并丸掌柜线上打款配置",
            "丸掌柜给丸友集打款",
            "丸掌柜配置线上打款并处理给丸友集的结算打款",
            "丸友集：工作室主账号；丸掌柜：企业主账号。",
            "丸友集已在结算中心-结算账单-丸友集中提交让丸掌柜打款的申请；丸掌柜主账号可进入结算中心-结算账单-丸掌柜。",
            "丸友集工作室、来源单号、订单标题、结算账单号、丸掌柜应付金额、丸掌柜商家支付账户、交易应用、交易通道、账号配置。",
            [
                "先执行用例B-SETTLE-WYJ-APPLY-001，丸友集在结算中心-结算账单-丸友集中提交让丸掌柜打款的申请。",
                "登录丸掌柜主账号。",
                "进入结算中心。",
                "进入结算账单-丸掌柜。",
                "按丸友集工作室、业务单号或结算账单号查询目标账单。",
                "点击线上打款配置。",
                "检查是否存在可用交易应用、交易通道和账号配置。",
                "如不存在可用交易应用、交易通道或账号配置，先执行用例B-SETTLE-PAYCENTER-001，完成丸掌柜支付中心基础配置。",
                "回到结算中心-结算账单-丸掌柜。",
                "再次进入线上打款配置。",
                "选择或新增丸掌柜的商家支付账户。",
                "选择对应交易应用、交易通道和账号配置。",
                "填写线上打款账户名称、商户号或账号号、支付方式、状态等页面必填项。",
                "保存线上打款配置。",
                "返回结算账单-丸掌柜，按结算账单号查询目标账单。",
                "勾选或打开目标丸友集结算账单。",
                "点击审核通过、确认打款或页面实际打款按钮。",
                "确认打款信息、打款账户、打款金额和收款方丸友集。",
                "提交审核并发起打款。",
                "刷新结算账单-丸掌柜，确认账单状态变为已打款、待丸友集确认收款或页面实际状态。",
                "登录丸友集主账号，进入结算中心-结算账单-丸友集，确认该账单状态同步更新。",
            ],
            "丸掌柜侧先完成线上打款配置，再处理给丸友集的结算打款；丸友集侧账单状态同步更新。",
            "丸掌柜线上打款配置、丸掌柜结算账单、丸友集结算账单、打款金额和状态一致。",
            "被F-SETTLE-PAY-002、F-SETTLE-L2L3-001引用",
            "待自动化",
            "按用户补充：丸掌柜线上打款配置合并到给丸友集打款用例中。",
        ),
    ],
    "flow_updates": [
        row(
            "F-SETTLE-CONFIG-001",
            "组合流程用例",
            "B-SETTLE-PAYCENTER-001 -> B-SETTLE-PLAYER-ACCOUNT-001",
            "结算配置流程",
            "支付中心基础配置和打手打款账户完善流程",
            "丸掌柜：企业主账号；丸友集：工作室主账号；打手应用：打手子账号。",
            "丸掌柜、丸友集、打手账号均可登录；支付中心和打手收入入口可访问。",
            "交易应用、交易通道、账号配置、打手收款账户信息。",
            [
                "先执行用例B-SETTLE-PAYCENTER-001，确认丸掌柜和丸友集支付中心的交易应用、交易通道、账号配置已启用。",
                "先执行用例B-SETTLE-PLAYER-ACCOUNT-001，确认或完善打手打款账户信息。",
                "进入丸友集-工作室基础应用-财务结算列表-结算账单列表，确认后续可进入线上打款配置。",
                "进入丸掌柜-结算中心-结算账单-丸掌柜，确认后续可进入线上打款配置。",
                "进入打手应用-我的收入，确认一键结算入口可用且不再提示账户未完善。",
            ],
            "支付中心基础配置可用；打手打款账户可用；丸友集和丸掌柜的线上打款配置分别在实际打款用例中完成。",
            "支付中心基础配置、打手账户状态、一键结算前置校验一致。",
            "组合举证：B-SETTLE-PAYCENTER-001解决支付中心基础配置；B-SETTLE-PLAYER-ACCOUNT-001解决打手收款账户",
            "待自动化",
            "原B-SETTLE-CONFIG-001已删除；线上打款配置分别合并到B-SETTLE-WANYOUJI-PAY-001和B-SETTLE-WZG-TO-WYJ-PAY-001。",
        ),
        row(
            "F-SETTLE-PAY-001",
            "组合流程用例",
            "F-MAIN-002 -> F-SETTLE-CONFIG-001 -> B-SETTLE-WANYOUJI-PAY-001",
            "打手结算正向流程",
            "丸友集配置线上打款并审核打手账单给打手打款",
            "丸友集：工作室主账号；打手应用：打手子账号。",
            "订单已完成并产生打手收入；打手已提交结算账单；支付中心基础配置和打手打款账户已完善。",
            "来源单号、订单标题、打手账号、收入金额、结算申请号/账单号、丸友集线上打款配置。",
            [
                "先执行用例F-MAIN-002，生成已验收并可结算的打手收入和打手结算账单。",
                "先执行用例F-SETTLE-CONFIG-001，确认支付中心基础配置和打手账户完善。",
                "执行用例B-SETTLE-WANYOUJI-PAY-001，丸友集在结算账单列表完成线上打款配置并审核打款。",
                "进入打手应用-我的收入，确认收入状态为已结算或已打款。",
            ],
            "打手结算账单由丸友集审核并完成打款；线上打款配置在打款前完成。",
            "打手收入金额、结算账单金额、线上打款配置、打款流水金额一致。",
            "组合举证：main_002收入和账单 -> 支付中心基础配置 -> 丸友集线上打款配置 -> 丸友集给打手打款",
            "待自动化",
            "按用户补充重构。",
        ),
        row(
            "F-SETTLE-PAY-002",
            "组合流程用例",
            "B-SETTLE-WYJ-APPLY-001 -> B-SETTLE-WZG-TO-WYJ-PAY-001",
            "丸掌柜给丸友集打款正向流程",
            "丸掌柜配置线上打款并处理给丸友集的结算打款",
            "丸友集：工作室主账号；丸掌柜：企业主账号。",
            "外来订单已完成；丸友集已形成对丸掌柜应收并提交打款申请；丸掌柜支付中心基础配置可用。",
            "丸友集工作室、来源单号、订单标题、应付金额、结算账单号、丸掌柜线上打款配置。",
            [
                "执行用例B-SETTLE-WYJ-APPLY-001，丸友集在结算中心-结算账单-丸友集中提交让丸掌柜打款的申请。",
                "执行用例B-SETTLE-WZG-TO-WYJ-PAY-001，丸掌柜在结算账单-丸掌柜完成线上打款配置并处理打款。",
                "登录丸友集主账号，进入结算中心-结算账单-丸友集。",
                "按结算账单号查询并确认账单状态为待确认收款、已打款或页面实际状态。",
            ],
            "丸掌柜完成线上打款配置并给丸友集打款；丸友集侧账单状态同步。",
            "丸掌柜应付金额、丸友集收款金额、结算账单号、线上打款配置一致。",
            "组合举证：丸友集提交申请 -> 丸掌柜线上打款配置 -> 丸掌柜给丸友集打款",
            "待自动化",
            "按用户补充重构。",
        ),
    ],
}

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