import {
  TrainCancellation,
  TrainTripType,
  tripItinerarySelectors
} from '@train-lib/index';
import { Timeouts } from '@utility-lib/constants';
import { utilitySelector } from '@utility-lib/utility';

export class CancellationFlow {
  static executeTrainCancellation(eTicket: string, tripType: string) {
    cy.contains(`${eTicket}`);

    cy.wait(Timeouts.MAX_TIMEOUT_120_SEC.timeout);
    cy.reload();
    cy.get(utilitySelector.bodySelector).then((btn) => {
      if (btn.find(tripItinerarySelectors.cancelUnavailable).length > 0) {
        cy.wait(Timeouts.MEDIUM_TIMEOUT_60_SEC.timeout);
        cy.reload();
        cy.get(tripItinerarySelectors.cancelTicket).click();
      } else {
        cy.get(tripItinerarySelectors.cancelTicket).click();
      }
    });
    cy.wait('@waitForBookingStatusUpdate');
    cy.allure().logStep('cancel trip button clicked');
    if (tripType === TrainTripType.ONEWAY) {
      TrainCancellation.oneWaySegmentSelectionCancellation();
    } else if (tripType === TrainTripType.ROUND_TRIP) {
      TrainCancellation.roundSegmentsSelectionCancellation();
    }

    TrainCancellation.cancellationCheckout();
  }
}
