import { SharedIntercepts } from '@intercepts-lib/index';
import { guidRegex } from '@utility-lib/constants';

const trainBaseUrl = '/api/trip/train/v1';

export class TrainInterceptApis {
  static interceptTrainApis() {
    SharedIntercepts.intercepts();

    cy.intercept('GET', /api\/admin\/discounts\/trains/).as('waitForDiscounts');
    //###################### TRAIN SEARCHES ######################
    cy.intercept('POST', new RegExp(`${trainBaseUrl}/flightAlternative`)).as('tofSearch');

    //#################### TRAIN OFFLINE ####################
    cy.intercept('POST', new RegExp(`${trainBaseUrl}/offline/submit`)).as(
      'waitForSubmit'
    );
    cy.intercept('POST', new RegExp(`${trainBaseUrl}/offline/init`)).as(
      'waitForRequestForm'
    );

    cy.intercept('POST', /api\/trip\/train\/v1\/searchStations\/search/).as(
      'waitForSearchStations'
    );

    cy.intercept(
      'GET',
      new RegExp(` /api/trip/train/v1/search/${guidRegex}/results/${guidRegex}`)
    ).as('waitForTrainSearch');

    //#################### TRAIN BOOKING ####################
    cy.intercept('GET', new RegExp(`${trainBaseUrl}/booking/`)).as(
      'waitForConfirmingBooking'
    );
    cy.intercept('POST', new RegExp(`${trainBaseUrl}/bookings/`)).as(
      'waitForBookingStatusUpdate'
    );

    //#################### TRAIN CONTRACT ####################
    cy.intercept('POST', new RegExp(`${trainBaseUrl}/contracts/`)).as(
      'waitForBookingStatusUpdate'
    );

    //#################### TRAIN SEARCh / CHECKOUT ####################
    cy.intercept('POST', /api\/trip\/train\/v1\/search/).as('waitForSearchOrCheckout');
    cy.intercept('POST', new RegExp(`${trainBaseUrl}/searchExchange/`)).as(
      'waitForChangeCheckout'
    );

    cy.intercept('GET', new RegExp(`(/api/invoices/v2/sync_status/${guidRegex})`)).as(
      'invoice'
    );

    cy.intercept('PATCH', new RegExp(`/api/trip/train/v1/contracts/${guidRegex}`)).as(
      'waitForSeatAdded'
    );

    cy.intercept('GET', /api\/trip\/train\/v1\/contracts/).as('waitForContract');
    //#################### TRAIN EXCHANGE ####################
    cy.intercept(
      'POST',
      new RegExp(`/api/trip/train/v1/contracts/${guidRegex}/bookExchange`)
    ).as('waitForExchange');

    cy.intercept('GET', /api\/invoices\/v2\/sync_status/).as('invoice');

    //#################### TRAIN LOYALTY CARD ####################
    // cy.intercept('GET', /api\/trip\/train\/v1\/trainCards\/search/).as('waitForTrainCard');
    cy.intercept('POST', /api\/trip\/train\/v1\/trainCards\/search/).as(
      'waitForLoadTrainCard'
    );
    cy.intercept('POST', /api\/trip\/train\/v1\/trainCards/).as('waitForAddTrainCard');
  }
}
