import { PayWithWalletService } from '../Services/PayWithWalletService';
import { CreateOrderRequestBuilder } from '../RequestDTOs/CreateOrderRequest';
import { QueryOrderResultBuilder } from '../RequestDTOs/QueryOrderResultRequest';
import { ErrorResponse } from '../ResponseDTOs/ErrorResponse';
import { plainToClass } from 'class-transformer';
import { PayInCreateOrderResponse } from '../ResponseDTOs/PayInCreateOrderResponse';
import { PayInCreateOrderResponseData } from '../ResponseDTOs/PayInCreateOrderResponseData';
import { TransactionResultsResponse } from '../ResponseDTOs/TransactionResultsResponse';
import {  createHeader, removeUndefinedValues, transformUndefinedToNull } from '../Utils/Util'; 



export class PayWithWalletServiceManager {
  private payWithWalletService: PayWithWalletService;

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

  

  async createOrder(createOrderRequestBuilder: CreateOrderRequestBuilder) {
    try {
      // Create order status
      const createOrderResponse = await this.payWithWalletService.createOrder(createOrderRequestBuilder);
      console.log("OrderResponse Manager: ", createOrderResponse);
      return createOrderResponse;
    } catch (error) {
      console.error('Error creating order:', error);
    }
  }

  async fetchOrderStatus(builder: QueryOrderResultBuilder) {
    try {
      // Fetch order status
      const fetchOrderStatusResponse = await this.payWithWalletService.fetchOrderStatus(builder);
      console.log("fetchOrderStatusResponse: ", fetchOrderStatusResponse);
      return fetchOrderStatusResponse; // Return the original response if needed
  } catch (error) {
      console.error('Error fetching order status:', error);
      throw error; // Rethrow the error to propagate it
  }
  }

  async querySinglePayIn(builder: QueryOrderResultBuilder) {
    try {
      const querySinglePayInResponse = await this.payWithWalletService.fetchOrderStatus(builder);
      console.log('querySinglePayIn Response:', querySinglePayInResponse);
      return querySinglePayInResponse;
    } catch (error) {
      console.error('Error creating order:', error);
    }
  }

 
}
