package com.crm.rely.backend.core.entity.wasabi;

import com.crm.rely.backend.core.constant.Constants;
import com.crm.rely.backend.core.constant.RegexpConstants;
import lombok.Data;
import org.hibernate.validator.constraints.NotBlank;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;

@Data
public class WasabiUserEntity {
    /**
     * 持卡人模式 B2B or B2C
     */
    private String cardHolderModel;

    private String merchantOrderNo;
    /**
     * 卡片类型ID
     */
    private Long cardTypeId;

    /**
     * 手机区号。[2...5]位
     * 取 支持的卡BIN接口 参数  supportHolderAreaCode
     */
    @NotBlank(message = Constants.AREA_CODE_NOT_NULL_ERROR)
    @NotNull(message = Constants.AREA_CODE_NOT_NULL_ERROR)
    @Size(min = 2, max = 5, message = Constants.PARAMETER_ERROR)
    private String areaCode;

    /**
     * 手机号。[5...20]位
     */
    @NotBlank(message = Constants.PHONE_NOT_NULL_ERROR)
    @NotNull(message = Constants.PHONE_NOT_NULL_ERROR)
    @Size(min = 5, max = 20, message = Constants.PARAMETER_ERROR)
    private String mobile;

    /**
     * 邮箱。需要接收验证码[5...50]位
     */
    @NotBlank(message = Constants.EMAIL_NOT_NULL_ERROR)
    @NotNull(message = Constants.EMAIL_NOT_NULL_ERROR)
    private String email;

    /**
     * 名。只支持英文字符。[2...23]位。firstName和lastName总长度不能超过23字符（包括空格）
     */
    @NotBlank(message = Constants.FIRST_NAME_NOT_NULL_ERROR)
    @NotNull(message = Constants.FIRST_NAME_NOT_NULL_ERROR)
    @Pattern(regexp = RegexpConstants.REGEXP_USER_NAME, message = Constants.FIRST_NAME_FORMAT_ERROR)
    private String firstName;

    /**
     * 姓。只支持英文字符。[2...23]位。firstName和lastName总长度不能超过23字符（包括空格）
     */
    @NotBlank(message = Constants.LAST_NAME_NOT_NULL_ERROR)
    @NotNull(message = Constants.LAST_NAME_NOT_NULL_ERROR)
    @Pattern(regexp = RegexpConstants.REGEXP_USER_NAME, message = Constants.LAST_NAME_FORMAT_ERROR)
    private String lastName;

    /**
     * 出生日期。yyyy-MM-dd
     */
    @NotBlank(message = Constants.BIRTHDAY_NOT_NULL_ERROR)
    @NotNull(message = Constants.BIRTHDAY_NOT_NULL_ERROR)
    private String birthday;

    /**
     * 国籍代码。ISO 3166-1 alpha-2
     * 取 支持的卡BIN接口 参数 supportHolderRegin
     */
    @NotBlank(message = Constants.NATIONALITY_NOT_NULL_ERROR)
    @NotNull(message = Constants.NATIONALITY_NOT_NULL_ERROR)
    private String nationality;

    /**
     * 账单地址的国家/地区代码。ISO 3166-1 alpha-2
     * 取 支持的卡BIN接口 参数 supportHolderRegin
     */
    @NotBlank(message = Constants.COUNTRY_NOT_NULL_ERROR)
    @NotNull(message = Constants.COUNTRY_NOT_NULL_ERROR)
    private String country;

    /**
     * 账单地址的城市代码。取 城市列表 code参数
     */
    @NotBlank(message = Constants.TOWN_NOT_NULL_ERROR)
    @NotNull(message = Constants.TOWN_NOT_NULL_ERROR)
    private String town;

    /**
     * 账单地址。
     * 只能包含字母、数字、连字符和空格。
     * regex: ^[A-Za-z0-9\- ]+$
     * 长度[2...40]位
     */
    @NotBlank(message = Constants.ADDRESS_NOT_NULL_ERROR)
    @NotNull(message = Constants.ADDRESS_NOT_NULL_ERROR)
    @Size(min = 2, max = 40, message = Constants.PARAMETER_ERROR)
    @Pattern(regexp = RegexpConstants.REGEXP_USER_ADDRESS, message = Constants.ADDRESS_FORMAT_ERROR)
    private String address;

    /**
     * 中文账单地址
     */
    private String addressCn;

    /**
     * 邮寄地址。
     * 只能包含字母、数字、连字符和空格。
     * regex: ^[A-Za-z0-9\- ]+$
     * 长度[2...40]位
     */
    private String mailingAddress;

    /**
     * 邮寄地址 中文
     */

    private String mailingAddressCn;

    /**
     * 账单地址邮编。[2...10]位
     */
    @NotBlank(message = Constants.ADDRESS_NOT_NULL_ERROR)
    @NotNull(message = Constants.ADDRESS_NOT_NULL_ERROR)
    @Size(min = 2, max = 10, message = Constants.PARAMETER_ERROR)
    @Pattern(regexp = RegexpConstants.REGEXP_POST_CODE, message = Constants.POST_CODE_FORMAT_ERROR)
    private String postCode;

    /**
     * 性别。M-男；F-女
     */
    private String gender;

    /**
     * 职业。取持卡人职业 occupationCode 参数
     */
    private String occupation;

    /**
     * 年薪。例：200000 USD
     */
    private String annualSalary;

    /**
     * 帐户用途。只支持英文，例如：Living Expense
     */
    private String accountPurpose;

    /**
     * 预期月交易量。100000 USD
     */
    private String expectedMonthlyVolume;

    /**
     * 证件类型。
     * PASSPORT：护照
     * HK_HKID：香港身份证
     * DLN：DLN
     * GOVERNMENT_ISSUED_ID_CARD：政府签发的身份证
     */
    @NotBlank(message = Constants.ID_TYPE_NOT_NULL_ERROR)
    @NotNull(message = Constants.ID_TYPE_NOT_NULL_ERROR)
    private String idType;

    /**
     * 证件证号。[2...50]位
     */
    @NotBlank(message = Constants.ID_NUMBER_NOT_NULL_ERROR)
    @NotNull(message = Constants.ID_NUMBER_NOT_NULL_ERROR)
    @Size(min = 2, max = 50, message = Constants.PARAMETER_ERROR)
    private String idNumber;

    /**
     * 安全号码。 如果签发国是美国，则需要 9 位数的 SSN
     */
    private String ssn;

    /**
     * id证件签发日期。yyyy-MM-dd
     */
    @NotBlank(message = Constants.ISSUE_DATE_NOT_NULL_ERROR)
    @NotNull(message = Constants.ISSUE_DATE_NOT_NULL_ERROR)
    private String issueDate;

    /**
     * 证件过期日期。yyyy-MM-dd
     */
    @NotBlank(message = Constants.ID_NO_EXPIRY_DATE_NOT_NULL_ERROR)
    @NotNull(message = Constants.ID_NO_EXPIRY_DATE_NOT_NULL_ERROR)
    private String idNoExpiryDate;

    /**
     * 证件照正面照片文件ID。调用 上传文件接口 获取
     */
    private String idFrontId;

    /**
     * 证件照背面照片文件ID。调用 上传文件接口 获取
     */
    private String idBackId;

    /**
     * 手持证件照文件ID。调用 上传文件接口 获取
     */
    private String idHoldId;

    /**
     * 证件照正面照片
     */
    private String idFrontUrl;

    /**
     * 证件照背面照片
     */
    private String idBackUrl;

    /**
     * 手持证件照
     */
    private String idHoldUrl;

    /**
     * 地址证明照片
     */
    private String addressUrl;

    /**
     * IPV4地址。
     */
    private String ipAddress;

    /**
     * 持卡人id
     */
    private Long holderId;

} 