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

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

/**
 * 其他类型证件信息
 * @author yjjie
 * @date 2025/12/26 15:42
 */
@Data
@Accessors(chain = true)
public class WechatEntryIdDocInfoReqDto {

    /**
     * 【必填】
     * 证件正面照片
     * 1、证件类型不为“身份证”时，上传证件正面照片；
     * 2、正面拍摄、清晰、四角完整、无反光或遮挡；不得翻拍、截图、镜像、PS；
     * 3、请上传彩色照片or彩色扫描件，复印件需加盖公章鲜章，可添加“微信支付”相关水印（如微信支付认证），见【指引文档】；
     * 4、可上传1张图片，请填写通过图片上传API预先上传图片生成好的MediaID。
     */
    @JSONField(name = "id_doc_copy")
    private String idDocCopy;

    /**
     * 【选填】
     * 证件反面照片
     * 1、若证件类型为往来通行证、外国人居留证、港澳居民居住证、台湾居民居住证时，上传证件反面照片；
     * 2、若证件类型为护照，无需上传反面照片；
     * 3、正面拍摄、清晰、四角完整、无反光或遮挡；不得翻拍、截图、镜像、PS；
     * 4、请上传彩色照片or彩色扫描件，复印件需加盖公章鲜章，可添加“微信支付”相关水印（如微信支付认证），见【指引文档】；
     * 5、可上传1张图片，请填写通过图片上传API预先上传图片生成好的MediaID。
     */
    @JSONField(name = "id_doc_copy_back")
    private String idDocCopyBack;

    /**
     * 【必填】
     * 证件姓名
     * 1、请填写经营者/法定代表人的证件姓名；
     * 2、长度为2-100个字符；
     * 3、前后不能有空格、制表符、换行符；
     * 4、不能仅含数字、特殊字符；
     * 5、仅能填写数字、英文字母、汉字及特殊字符；
     * 6、该字段需要使用微信支付公钥加密（推荐），请参考获取微信支付公钥ID说明以及微信支付公钥加密敏感信息指引，也可以使用微信支付平台证书公钥加密，参考获取平台证书序列号、平台证书加密敏感信息指引。
     */
    @JSONField(name = "id_doc_name")
    private String idDocName;

    /**
     * 【必填】
     * 证件号码
     * 1、请填写经营者/法定代表人的证件号码：
     * 护照（限境外人士）：4-15位 数字|字母|连字符；
     * 中国香港居民--来往内地通行证：H/h开头+8或10位数字/字母；
     * 中国澳门居民--来往内地通行证：M/m开头+8或10位数字/字母；
     * 中国台湾居民--来往大陆通行证：8位数字或10位数字；
     * 外国人居留证：15位 数字|字母；
     * 台湾居民居住证/港澳居民居住证：17位数字+1位数字|X；
     * 2、该字段需要使用微信支付公钥加密（推荐），请参考获取微信支付公钥ID说明以及微信支付公钥加密敏感信息指引，也可以使用微信支付平台证书公钥加密，参考获取平台证书序列号、平台证书加密敏感信息指引。
     */
    @JSONField(name = "id_doc_number")
    private String idDocNumber;

    /**
     * 【选填】
     * 证件居住地址
     * 1、主体类型为企业时，需要填写。其他主体类型，无需上传；
     * 2、请按照身份证住址填写，如广东省深圳市南山区xx路xx号xx室；
     * 3、长度为4-128个字符；
     * 4、前后不能有空格、制表符、换行符；
     * 5、不能仅含数字、特殊字符；
     * 6、仅能填写数字、英文字母、汉字及特殊字符；
     * 7、仅支持utf-8格式；
     * 8、 该字段需要使用微信支付公钥加密（推荐），请参考获取微信支付公钥ID说明以及微信支付公钥加密敏感信息指引，也可以使用微信支付平台证书公钥加密，参考获取平台证书序列号、平台证书加密敏感信息指引。
     */
    @JSONField(name = "id_doc_address")
    private String idDocAddress;

    /**
     * 必填
     * 证件有效期开始时间
     * 1、日期格式应满足合法的YYYY-MM-DD格式；
     * 2、开始时间不能小于1900-01-01；
     * 3、开始时间不能大于等于当前日期。
     */
    @JSONField(name = "doc_period_begin")
    private String docPeriodBegin;

    /**
     * 必填
     * 证件有效期结束时间
     * 1、日期格式应满足合法的YYYY-MM-DD格式或长期；
     * 2、结束时间需大于开始时间。
     */
    @JSONField(name = "doc_period_end")
    private String docPeriodEnd;
}
