import { Utility, verticalType, utilitySelector, Timeouts } from '@utility-lib/index';

export const createEventSelector = {
  createEventText: '[data-testid="createEventText"]',
  eventLocation: '.ta-location-search-v2 input',
  eventNameField: '[data-testid="eventTitleInput"]',
  eventLocationFieldOptions: '[data-testid="locationFieldSubtitle"]',
  upcomingEventActionButton: '[data-testid="upcomingEventActionButton"]',
  eventDatePicker: '[data-testid="createEventDatePicker"]',
  nextMonthArrow: '[data-testid="datePickerNextMonthButton"]',
  calendarDay: '[data-testid="calendarDay"]',
  datePickerDoneButton: '[data-testid="datePickerDoneButton"]',
  saveAndContinueButton: '[data-testid="saveAndContinueButton"]',
  bookTripLater: '[data-testid="bookLaterButton"]'
};

export class CreateEvent {
  static selectEventLocation(location: string) {
    cy.allure().logStep(`fill in event location: ${location}`);
    cy.get(createEventSelector.createEventText).should('be.visible');
    cy.get(createEventSelector.eventLocation)
      .eq(1)
      .then((ele) => {
        cy.wrap(ele).click({ force: true });
        cy.wrap(ele).type(location, { force: true });
      });

    cy.get(createEventSelector.eventLocationFieldOptions)
      .eq(0)
      .trigger('click', { force: true });
  }
  static selectSelfSellEventLocation(location: string) {
    cy.allure().logStep(`fill in event location: ${location}`);
    cy.get(createEventSelector.createEventText).should('be.visible');
    cy.get(createEventSelector.eventLocation).then((ele) => {
      cy.wrap(ele).click({ force: true });
      cy.wrap(ele).type(location, { force: true });
    });

    cy.get(createEventSelector.eventLocationFieldOptions)
      .eq(0)
      .trigger('click', { force: true });
  }

  static setEventTitle(title: string) {
    cy.allure().logStep(`set event title: ${title}`);
    cy.get(createEventSelector.eventNameField).then((ele) => {
      cy.wrap(ele).click({ force: true });
      cy.wrap(ele).type(`${title}`, { force: true });
    });
  }

  static setEventDates(eventStartDate: string, eventEndDate: string) {
    cy.allure().logStep('set event start/end dates');
    cy.get(createEventSelector.eventDatePicker).eq(1).click();
    cy.get(createEventSelector.nextMonthArrow).click();
    cy.get(createEventSelector.calendarDay).contains(eventStartDate).click();
    cy.get(createEventSelector.calendarDay).contains(eventEndDate).click();
    cy.get(createEventSelector.datePickerDoneButton).contains('Done').click();
    cy.get(createEventSelector.saveAndContinueButton).should('be.visible');
  }

  static createDraftEvent() {
    cy.allure().logStep('create draft event');
    cy.get(createEventSelector.saveAndContinueButton).click();
    cy.wait('@waitForTeamEvent');
  }

  static openSearchPage() {
    cy.allure().logStep('open search page');
    Utility.visitSearchPage();
    cy.wait(Timeouts.SHORT_TIMEOUT_5_SEC.timeout);
  }

  static clickNextButton() {
    cy.allure().logStep(`click next button`);
    cy.get(createEventSelector.saveAndContinueButton).click();
  }

  static bookThisTripLater() {
    cy.allure().logStep('book this trip late');
    cy.get(createEventSelector.bookTripLater).click();
  }

  static verifyUpcomingEventReviewButton() {
    const buttonText = ' View details ';
    cy.allure().logStep('verify upcoming event review button');
    cy.get(createEventSelector.upcomingEventActionButton, Timeouts.MEDIUM_TIMEOUT_60_SEC)
      .should('be.visible')
      .contains(buttonText);
  }

  static selectTeamEventVertical(tab: verticalType) {
    cy.allure().logStep(`select search type: ${tab}`);
    cy.get(utilitySelector.dataTestID(tab), Timeouts.MEDIUM_TIMEOUT_60_SEC)
      .should('be.visible')
      .click();
  }
}
