package shop.alien.entity.store.dto;

import com.fasterxml.jackson.annotation.JsonAlias;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * ant.merchant.expand.indirect.zft.create（二级商户创建）请求。
 * <p>
 * 与官方网关 multipart 中 {@code biz_content} 一致：可将整段业务 JSON 放在 {@link #bizContent} 中；
 * 也可仅用顶层 {@link #externalId}、{@link #merchantType} 等与 {@link #extraBiz} 组合。
 * <p>
 * 合并顺序：先 {@link #bizContent}，再 {@link #extraBiz}，最后非空的顶层字段覆盖同名键（便于局部纠偏）。
 */
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
@ApiModel("直付通二级商户创建（zft.create）")
public class AlipayZftMerchantCreateDto implements Serializable {

    private static final long serialVersionUID = 1L;

    @ApiModelProperty(value = "门店ID（选取该门店支付宝应用与证书）", required = true)
    private Integer storeId;

    @ApiModelProperty("异步通知地址，按文档选填")
    private String notifyUrl;

    @ApiModelProperty("支付宝应用 app_id；不传则使用门店配置")
    @JsonProperty("app_id")
    @JsonAlias("appId")
    private String appId;

    @ApiModelProperty("应用授权令牌 app_auth_token（第三方代调用时选填）")
    @JsonProperty("app_auth_token")
    @JsonAlias("appAuthToken")
    private String appAuthToken;

    @ApiModelProperty("接口版本 api_version，一般无需传")
    @JsonProperty("api_version")
    @JsonAlias("apiVersion")
    private String apiVersion;

    @ApiModelProperty("商户编号 external_id；可与 biz_content 二选一（biz_content 内已含则可不传顶层）")
    @JsonProperty("external_id")
    @JsonAlias("externalId")
    private String externalId;

    @ApiModelProperty("商户类型 merchant_type；可与 biz_content 二选一")
    @JsonProperty("merchant_type")
    @JsonAlias("merchantType")
    private String merchantType;

    @ApiModelProperty("商户名称；可与 biz_content 二选一")
    private String name;

    @ApiModelProperty("商户别名 alias_name；可与 biz_content 二选一")
    @JsonProperty("alias_name")
    @JsonAlias("aliasName")
    private String aliasName;

    @ApiModelProperty("商户类目 MCC；可与 biz_content 二选一")
    private String mcc;

    @ApiModelProperty("开通服务 service；可与 biz_content 二选一")
    private List<String> service;

    @ApiModelProperty("与官方接口 biz_content 一致的整体对象（推荐）。与 extraBiz、顶层字段合并后作为最终 biz_content")
    @JsonProperty("biz_content")
    @JsonAlias("bizContent")
    private Map<String, Object> bizContent;

    @ApiModelProperty("其余 biz_content 字段（可选），在 biz_content 之后合并；同名字段以顶层显式字段为准")
    private Map<String, Object> extraBiz;
}
