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

export class VirtualAccountOperationsRequest extends PaymentRequest {
   virtualAccountNo?: string;
   status?: string;
   orderNo?: string;
   accountNo?: string;
   startTime?: number;
   endTime?: number;
   pageIndex?: number;
   pageSize?: number;
   

  constructor(
    paymentRequest: PaymentRequest,
    virtualAccountNo?: string,
    status?: string,
    orderNo?: string,
    accountNo?: string,
    startTime?: number,
    endTime?: number,
    pageIndex?: number,
    pageSize?: number,
    
  ) {
    super(paymentRequest.requestTime, paymentRequest.version, paymentRequest.nonceStr);
    this.virtualAccountNo = virtualAccountNo;
    this.status = status;
    this.orderNo = orderNo;
    this.accountNo = accountNo;
    this.startTime = startTime;
    this.endTime = endTime;
    this.pageIndex = pageIndex;
    this.pageSize = pageSize;
  }

  public toJSON(): object {
    return {
      requestTime: this.requestTime,
      version: this.version,
      nonceStr: this.nonceStr,
      virtualAccountNo: this.virtualAccountNo,
      status: this.status,
      orderNo: this.orderNo,
      accountNo: this.accountNo,
      startTime: this.startTime,
      endTime: this.endTime,
      pageIndex: this.pageIndex,
      pageSize: this.pageSize,
      
    };
  }
}


export class VirtualAcctOperationsBuilder extends BuildPayload {
   
  private virtualAccountNo?: string;
  private status?: string;
  private orderNo?: string;
  private accountNo?: string;
  private startTime?: number;
  private endTime?: number;
  private pageIndex?: number;
  private pageSize?: number;

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

  public setvirtualAccounttNo(virtualAccounttNo: string): VirtualAcctOperationsBuilder {
    this.virtualAccountNo = virtualAccounttNo;
    return this;
  }

  public setStatus(status: string): VirtualAcctOperationsBuilder {
    this.status = status;
    return this;
  }

  public setOrderNo(orderNo: string): VirtualAcctOperationsBuilder {
    this.orderNo = orderNo;
    return this;
  }

  public setAccountNo(accountNo: string): VirtualAcctOperationsBuilder {
    this.accountNo = accountNo;
    return this;
  }

  public setStartTime(startTime: number): VirtualAcctOperationsBuilder {
    this.startTime = startTime;
    return this;
  }

  public setEndTime(endTime: number): VirtualAcctOperationsBuilder {
    this.endTime = endTime;
    return this;
  }

  public setPageIndex(pageIndex: number): VirtualAcctOperationsBuilder {
    this.pageIndex = pageIndex;
    return this;
  }

  public setPageSize(pageSize: number): VirtualAcctOperationsBuilder {
    this.pageSize = pageSize;
    return this;
  }

  public build(): VirtualAccountOperationsRequest {
    return new VirtualAccountOperationsRequest(
      super.build(),
      this.virtualAccountNo,
      this.status,
      this.orderNo,
      this.accountNo,
      this.startTime,
      this.endTime,
      this.pageIndex,
      this.pageSize,
    );
  }
}
