from __future__ import annotations

import json
from pathlib import Path


ROOT = Path(__file__).resolve().parents[1]
OUTPUT = ROOT / "runtime" / "paycenter_settlement_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 = {
    "case_updates": [
        row(
            "B-SETTLE-PAYCENTER-001",
            "分支小用例",
            "插入B-SETTLE-CONFIG-001前",
            "支付中心配置",
            "支付中心配置交易应用、交易通道和账号配置",
            "丸友集：主账号；丸掌柜：主账号；账号需具备支付中心配置权限。",
            "丸友集、丸掌柜主账号可登录；支付中心可访问；交易应用、交易通道、账号配置资料已准备。",
            "应用名称、应用编码、回调地址、通道编码、通道名称、业务类型、支付方式、账号编码、账号名称、支付应用ID、密钥、证书配置。",
            [
                "登录丸友集或丸掌柜主账号。",
                "进入丸游管理后台。",
                "切换到需要配置的应用入口，例如丸友集或丸掌柜。",
                "在左侧菜单展开支付中心。",
                "进入支付中心-交易应用。",
                "点击新增或编辑目标交易应用。",
                "填写应用名称、应用编码、回调地址和状态。",
                "保存交易应用配置。",
                "回到交易应用列表，按应用编码查询并确认状态为启用。",
                "进入支付中心-交易通道。",
                "点击创建或编辑目标交易通道。",
                "选择刚配置的交易应用。",
                "填写通道编码、通道名称、业务类型、支付方式、排序和状态。",
                "保存交易通道配置。",
                "回到交易通道列表，按通道编码查询并确认状态为启用。",
                "进入支付中心-账号配置。",
                "点击新增或编辑支付应用配置。",
                "填写编码、名称、显示名称、账号名称、账号号、支付方式、支付应用ID。",
                "填写支付宝支付配置、接口密钥、公钥、应用公钥证书、支付宝公钥证书、支付宝根证书等页面要求字段。",
                "保存账号配置。",
                "回到账号配置列表，按编码或名称查询并确认配置可用。",
                "如丸友集和丸掌柜需要分别配置，切换应用后重复交易应用、交易通道、账号配置三段配置。",
                "确认支付中心三类配置完成后，再执行B-SETTLE-CONFIG-001。",
            ],
            "支付中心交易应用、交易通道、账号配置均已保存并启用；后续商家结算信息配置具备支付基础资料。",
            "交易应用、交易通道、账号配置三处列表状态均为启用；应用编码、通道编码、账号配置与后续结算配置引用一致。",
            "B-SETTLE-CONFIG-001前置；被F-SETTLE-CONFIG-001引用",
            "待自动化",
            "根据用户补充新增：丸友集/丸掌柜结算前需先做支付中心基础配置。",
        ),
        row(
            "B-SETTLE-CONFIG-001",
            "分支小用例",
            "B-SETTLE-PAYCENTER-001之后；插入打款/结算流程前",
            "结算配置",
            "丸掌柜、丸友集完善商户打款配置",
            "丸掌柜：主账号；丸友集：主账号；账号需具备支付中心和结算配置权限。",
            "已完成B-SETTLE-PAYCENTER-001；丸掌柜、丸友集主账号可登录；支付中心可访问；商户支付信息资料已准备。",
            "商户名称、商户号、开户主体、银行卡/对公账户、支付渠道、结算方式、联系人信息。",
            [
                "先执行用例B-SETTLE-PAYCENTER-001，完成支付中心-交易应用、交易通道、账号配置。",
                "登录丸掌柜主账号。",
                "进入支付中心。",
                "进入商户支付信息/商户打款配置页面。",
                "搜索当前丸掌柜商户。",
                "检查是否已完善商户支付信息。",
                "如已完善，记录当前配置状态并跳过新增。",
                "如未完善，点击新增/编辑商户支付信息。",
                "填写商户号、开户主体、开户行、银行卡或对公账户、支付渠道、联系人等必填项。",
                "保存配置。",
                "刷新页面并确认配置状态为已完善/启用。",
                "登录丸友集主账号。",
                "进入支付中心。",
                "进入商户支付信息/商户打款配置页面。",
                "按同样方式检查并完善丸友集商户支付信息。",
                "分别回到丸掌柜和丸友集结算相关页面，确认结算/打款入口不再提示缺少商户支付配置。",
            ],
            "丸掌柜、丸友集商户支付信息均已完善；已完善时流程可跳过；未完善时保存后状态可用。",
            "支付中心基础配置、商户主体、商户号、账户信息与结算页面前置校验一致。",
            "依赖B-SETTLE-PAYCENTER-001；组合F-SETTLE-PAY-001、F-SETTLE-PAY-002前置",
            "待自动化",
            "新增结算/打款小用例。",
        ),
    ],
    "flow_updates": [
        row(
            "F-SETTLE-CONFIG-001",
            "组合流程用例",
            "B-SETTLE-PAYCENTER-001 -> B-SETTLE-CONFIG-001 -> B-SETTLE-PLAYER-ACCOUNT-001",
            "结算配置流程",
            "支付中心基础配置、商户支付配置和打手打款账户完善流程",
            "丸掌柜：主账号；丸友集：主账号；打手应用：打手子账号。",
            "丸掌柜、丸友集、打手账号均可登录；支付中心和打手收入入口可访问。",
            "交易应用、交易通道、账号配置、商户支付信息、打手收款账户信息。",
            [
                "先执行用例B-SETTLE-PAYCENTER-001。",
                "进入丸掌柜/丸友集-支付中心-交易应用，确认目标交易应用已启用。",
                "进入丸掌柜/丸友集-支付中心-交易通道，确认目标交易通道已启用。",
                "进入丸掌柜/丸友集-支付中心-账号配置，确认目标支付账号配置已启用。",
                "先执行用例B-SETTLE-CONFIG-001。",
                "进入丸掌柜-支付中心-商户支付信息或商户打款配置，确认丸掌柜商户支付配置已完善。",
                "进入丸友集-支付中心-商户支付信息或商户打款配置，确认丸友集商户支付配置已完善。",
                "先执行用例B-SETTLE-PLAYER-ACCOUNT-001。",
                "进入打手应用-我的收入。",
                "进入打款账户/收款账户设置。",
                "确认打手打款账户已完善。",
                "返回打手应用-我的收入。",
                "确认一键结算入口可用，且不再提示账户未完善。",
            ],
            "支付中心基础配置可用；丸掌柜、丸友集商户支付配置可用；打手打款账户可用；后续打款链路前置满足。",
            "交易应用、交易通道、账号配置、商户支付配置、打手账户状态、一键结算前置校验一致。",
            "组合举证：B-SETTLE-PAYCENTER-001解决支付中心基础配置；B-SETTLE-CONFIG-001解决商户打款配置；B-SETTLE-PLAYER-ACCOUNT-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)
