import { SharedIntercepts } from '@intercepts-lib/index';
import { paymentMethodDetails } from '@fixtures/travelxen/payment-methods';

const agentDesktopBaseUrl = '/api/agentDesktop/v1/';

export class TravelXenInterceptApis {
  static interceptTravelxenApis() {
    SharedIntercepts.intercepts();
    cy.intercept('POST', '/api/uaa/token').as('getToken');
    cy.intercept('GET', `${agentDesktopBaseUrl}agencies`).as('getAgencies');
    cy.intercept('GET', '/api/user/split/getsplits').as('getSplits');
    cy.intercept('GET', `${agentDesktopBaseUrl}users/dropdownOptions`).as(
      'getDropdownOptions'
    );

    cy.intercept('GET', `${agentDesktopBaseUrl}users`).as('getUsers');
    cy.intercept('GET', new RegExp(`${agentDesktopBaseUrl}users\\?q=`)).as('searchUsers');
    cy.intercept('GET', new RegExp(`${agentDesktopBaseUrl}bookings/authzAware`)).as(
      'searchBookings'
    );
  }

  static interceptPaymentMethodsApis() {
    cy.intercept('GET', '**/user/**/paymentMethods', (req) => {
      req.continue((res) => {
        res.body = {
          ...req.body,
          allowedToViewDetails: true
        };
      });
    }).as('userPaymentMethods');
    cy.intercept('GET', '**/company/**/paymentMethods', {
      body: { allowedToViewDetails: true, paymentMethods: [] },
      delayMs: 500,
      headers: { 'access-control-allow-origin': '*' },
      statusCode: 200
    }).as('companyPaymentMethods');
    cy.intercept('PUT', '**/authorize', { statusCode: 200, body: {} }).as('authorize');
    cy.intercept('POST', '**/view', { statusCode: 200, body: {} }).as('view');
    cy.intercept('POST', '**/request').as('sendRequest');
    cy.intercept('GET', '**/details', {
      body: paymentMethodDetails,
      delayMs: 500,
      headers: { 'access-control-allow-origin': '*' },
      statusCode: 200
    }).as('getPaymentDetails');
  }
}
