import { DomainError } from '@/shared/exceptions/domain.exception';

export class KYCInfo {
  constructor(
    public readonly realName: string,
    public readonly idCardNumber: string,
    public readonly idCardFrontUrl: string,
    public readonly idCardBackUrl: string,
  ) {
    if (!realName || realName.length < 2) {
      throw new DomainError('真实姓名不合法');
    }
    if (
      !/^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[0-9Xx]$/.test(
        idCardNumber,
      )
    ) {
      throw new DomainError('身份证号格式错误');
    }
  }

  static create(params: {
    realName: string;
    idCardNumber: string;
    idCardFrontUrl: string;
    idCardBackUrl: string;
  }): KYCInfo {
    return new KYCInfo(
      params.realName,
      params.idCardNumber,
      params.idCardFrontUrl,
      params.idCardBackUrl,
    );
  }

  maskedIdCardNumber(): string {
    return this.idCardNumber.replace(/(\d{6})\d{8}(\d{4})/, '$1********$2');
  }
}
