import { PaymentRequest,BuildPayload } from './PaymentRequest';

export class CreateVirtualAccountRequest extends PaymentRequest {
   virtualAccountName?: string;
   identityType?: string;
   licenseNumber?: string;
   email?: string;
   customerName?: string;
   

  constructor(
    paymentRequest: PaymentRequest,
    virtualAccountName?: string,
    identityType?: string,
    licenseNumber?: string,
    email?: string,
    customerName?: string,
    
  ) {
    super(paymentRequest.requestTime, paymentRequest.version, paymentRequest.nonceStr);
    this.virtualAccountName = virtualAccountName;
    this.identityType = identityType;
    this.licenseNumber = licenseNumber;
    this.email = email;
    this.customerName = customerName;
    
  }

  public toJSON(): object {
    return {
      requestTime: this.requestTime,
      version: this.version,
      nonceStr: this.nonceStr,
      virtualAccountName: this.virtualAccountName,
      identityType: this.identityType,
      licenseNumber: this.licenseNumber,
      email: this.email,
      customerName: this.customerName,
     
    };
  }
}


export class CreateVirtualAccountRequestBuilder extends BuildPayload {
   
    
  private virtualAccountName?: string;
  private identityType?: string;
  private licenseNumber?: string;
  private email?: string;
  private customerName?: string;

  constructor(requestTime: number, version: string, nonceStr: string) {
    super(requestTime, version, nonceStr);
    
  }

  public setVirtualAccountName(virtualAccountName: string): CreateVirtualAccountRequestBuilder {
    this.virtualAccountName = virtualAccountName;
    return this;
  }

  public setIdentityType(identityType: string): CreateVirtualAccountRequestBuilder {
    this.identityType = identityType;
    return this;
  }

  public setLicenseNumber(licenseNumber: string): CreateVirtualAccountRequestBuilder {
    this.licenseNumber = licenseNumber;
    return this;
  }

  public setEmail(email: string): CreateVirtualAccountRequestBuilder {
    this.email = email;
    return this;
  }

  public setCustomerName(customerName: string): CreateVirtualAccountRequestBuilder {
    this.customerName = customerName;
    return this;
  }


  public build(): CreateVirtualAccountRequest {
    return new CreateVirtualAccountRequest(
      super.build(),
      this.virtualAccountName,
      this.identityType,
      this.licenseNumber,
      this.email,
      this.customerName
    );
  }
}
