package com.czg.third.wechat.dto.req.entry;

import com.alibaba.fastjson2.annotation.JSONField;
import lombok.Data;
import lombok.experimental.Accessors;

/**
 * 微信进件-银行账号
 *
 * @author yjjie
 * @date 2025/12/26 13:42
 */
@Data
@Accessors(chain = true)
public class WechatEntryBankAccountReqDto {

    /**
     * 【必填】
     * 账户类型
     * 1、若主体为企业/政府机关/事业单位/社会组织，可填写：对公银行账户；
     * 2、若主体为个体户，可选择填写：对公银行账户或经营者个人银行卡
     * 可选取值  BANK_ACCOUNT_TYPE_CORPORATE:  对公银行账户 BANK_ACCOUNT_TYPE_PERSONAL:  经营者个人银行卡
     */
    @JSONField(name = "bank_account_type")
    private String bankAccountType;

    /**
     * 【必填】
     * 开户名称
     * 1、选择“经营者个人银行卡”时，开户名称必须与“经营者证件姓名”一致；
     * 2、选择“对公银行账户”时，开户名称必须与营业执照上的“商户名称”一致；
     * 3、该字段需要使用微信支付公钥加密（推荐），请参考获取微信支付公钥ID说明以及微信支付公钥加密敏感信息指引，也可以使用微信支付平台证书公钥加密，参考获取平台证书序列号、平台证书加密敏感信息指引。
     * <a href="https://pay.weixin.qq.com/doc/v3/partner/4013059044">...</a>
     */
    @JSONField(name = "account_name")
    private String accountName;

    @JSONField(name = "bank_address_code")
    private String bankAddressCode;

    /**
     * 【必填】
     * 开户银行
     * 对私银行调用：查询支持个人业务的银行列表API
     * 对公银行调用：查询支持对公业务的银行列表API
     */
    @JSONField(name = "account_bank")
    private String accountBank;

    /**
     * 【选填】
     * 开户银行银行号
     * 1、根据开户银行查询接口中的“是否需要填写支行”判断是否需要填写。如为其他银行，开户银行全称（含支行）和开户银行联行号二选一；
     * 2、详细需调用查询支行列表API查看查询结果。 <a href="https://pay.weixin.qq.com/doc/v3/partner/4012697673">...</a>
     */
    @JSONField(name = "bank_branch_id")
    private String bankBranchId;

    /**
     * 【选填】
     * 开户银行全称（含支行）
     * 1、根据开户银行查询接口中的“是否需要填写支行”判断是否需要填写。如为其他银行，开户银行全称（含支行）和开户银行联行号二选一；
     * 2、详细需调用查询支行列表API查看查询结果。 <a href="https://pay.weixin.qq.com/doc/v3/partner/4012697673">...</a>
     */
    @JSONField(name = "bank_name")
    private String bankName;

    /**
     * 【必填】
     * 开户银行账号
     * 1、选择“经营者个人银行卡”时，开户账号为经营者个人银行卡号；
     * 2、选择“对公银行账户”时，开户账号为对公银行账号；
     * 3、该字段需要使用微信支付公钥加密（推荐），请参考获取微信支付公钥ID说明以及微信支付公钥加密敏感信息指引，也可以使用微信支付平台证书公钥加密，参考获取平台证书序列号、平台证书加密敏感信息指引。
     * <a href="https://pay.weixin.qq.com/doc/v3/partner/4013059044">...</a>
     */
    @JSONField(name = "account_number")
    private String accountNumber;
}
