import { PayWithCodeService } from '../Services/PayWithCodeService';
import { CreateVirtualAccountRequestBuilder } from '../RequestDTOs/CreateVirtualAccountRequest';
import { QueryOrderResultBuilder } from '../RequestDTOs/QueryOrderResultRequest';
import { ErrorResponse } from '../ResponseDTOs/ErrorResponse';
import { PayInCreateOrderResponse } from '../ResponseDTOs/PayInCreateOrderResponseOld';
import { VirtualAccountService } from '../Services/VirtualAccountService';
import { BuildPayload } from '../RequestDTOs/PaymentRequest';

export class VirtualAccountServiceManager {
  private virtualAccountService: VirtualAccountService;

  constructor(
    private appId: string,
    private countryCode: string,
    privateKey: string,
    isTest: boolean
  ) {
    this.virtualAccountService = new VirtualAccountService(
      appId,
      countryCode,
      privateKey,
      isTest
    );
  }
  
  

  async createVirtualAccount(createVirtualAccountRequestBuilder: BuildPayload) {
    try {
      const createOrderResponse = await this.virtualAccountService.createVirtualAccount(createVirtualAccountRequestBuilder);
      return createOrderResponse;
    } catch (error) {
      console.error('Error creating order:', error);
    }
  }

  async updateVirtualAccountStatus(updateVirtualAccountStatusBuilder: BuildPayload) {
    try {
      const createOrderResponse = await this.virtualAccountService.updateVirtualAcctStatus(updateVirtualAccountStatusBuilder);
      return createOrderResponse;
    } catch (error) {
      console.error('Error creating order:', error);
    }
  }

  async deleteVirtualAccount(deleteVirtualAcctRequest: BuildPayload) {
    try {
      const deleteVirtualAcctResp = await this.virtualAccountService.deleteVirtualAccount(deleteVirtualAcctRequest);
      return deleteVirtualAcctResp;
    } catch (error) {
      console.error('Error creating order:', error);
    }
  }

  async queryVirtualAccount(queryVirtualAccountRequest: BuildPayload) {
    try {
      const queryVirtualAccountResponse = await this.virtualAccountService.queryVirtualAccount(queryVirtualAccountRequest);
      return queryVirtualAccountResponse;
    } catch (error) {
      console.error('Error creating order:', error);
    }
  }

  async querySinglePayInOrder(querySinglePayInOrderRequest: BuildPayload) {
    try {
      const querySinglePayInOrderResponse = await this.virtualAccountService.querySinglePayInOrder(querySinglePayInOrderRequest);
      return querySinglePayInOrderResponse;
    } catch (error) {
      console.error('Error creating order:', error);
    }
  }

  async queryBulkPayInOrder(queryBulkPayInOrderRequest: BuildPayload) {
    try {
      const queryBulkPayInOrderResponse = await this.virtualAccountService.queryBulkPayInOrder(queryBulkPayInOrderRequest);
      return queryBulkPayInOrderResponse;
    } catch (error) {
      console.error('Error creating order:', error);
    }
  }


  

 
}
