const eventsPageSelector = {
  eventDateFilter: '[data-testid="eventRangeDropDown"]',
  eventDatePicker: '[data-testid="filterEventDateRange"]',
  calendarDate: '[data-testid="calendarDay"]',
  doneButton: '[data-testid="datePickerDoneButton"]',
  eventTitle: '[qaid="eventItemTitle"]',
  createEventButton: '[data-testid="createEventButton"]',
  eventName: (eventName: string) => `[qaId="eventItemTitle"][title="${eventName}"]`,
  eventThreeDotMenu: '[data-testid="threeDotMenu"]',
  eventDeleteDraftBtn: '[class="ta-button-v2 warning ta-button-v2-ghost flex"]',
  cancelEventModalBtn: '[data-testid="Delete draft modal button"]',
  eventLabel: '[data-testid="eventStatusLabel"]'
};

export class EventsPage {
  static selectEventStartEndDate(eventStartDate: string, eventEndDate: string) {
    cy.allure().logStep('set event date');
    cy.get(eventsPageSelector.eventDateFilter).click();
    cy.get(eventsPageSelector.eventDatePicker).click();
    cy.get(eventsPageSelector.calendarDate).contains(eventStartDate).click();
    cy.get(eventsPageSelector.calendarDate).contains(eventEndDate).click();
    cy.get(eventsPageSelector.doneButton).click();
  }

  static verifyEventsByDate(text: string) {
    cy.get(eventsPageSelector.eventTitle).each((item) => {
      cy.wrap(item).should('contain.text', text);
    });
  }

  static clickCreateEvent() {
    cy.allure().logStep('click on Create event button');
    cy.get(eventsPageSelector.createEventButton).click();
  }

  static selectEventByTitle(eventName: string) {
    cy.allure().logStep(`select event by title: ${eventName}`);
    cy.get(eventsPageSelector.eventName(eventName)).eq(0).click();
  }

  static cancelEvent() {
    cy.allure().logStep('cancel event');
    cy.get(eventsPageSelector.eventThreeDotMenu).eq(0).click();
    cy.get(eventsPageSelector.eventDeleteDraftBtn).contains('Cancel event').click();
    cy.get(eventsPageSelector.cancelEventModalBtn).click();
    cy.get(eventsPageSelector.eventLabel).eq(0).should('contain.text', 'Canceled');
  }
}
