const activeTravelersPageSelectors = {
  coronaTableHeaders: '[role="columnheader"]',
  seeCountriesButton: '#mat-button-toggle-1',
  searchButton: '[aria-label="State"]',
  searchResultsTableData: 'tbody[role="rowgroup"]',
  bottomResourceHeading: '.resources-subheading',
  bottomResourceButton: '.row ta-button-v2 button',
  checkRestrictionsButton: 'div.restriction-widget button',
  usState: '#mat-button-toggle-2'
};

type region = 'US State' | 'Country';
type searchLocation = 'New York' | 'Netherlands';

export class ActiveTravelersPage {
  static visitActiveTravelersPage() {
    cy.allure().logStep('Visit active travelers page');
    cy.intercept('GET', /api\/user\/continents/).as('waitForActiveTravelers');
    cy.visit('app/admin2/en/activeTravelers/covid-19');
    cy.url().should('include', '/activeTravelers');
    cy.wait('@waitForActiveTravelers');
  }

  static verifyCovidImpactStatusBy(statusBy: region) {
    if (statusBy == 'US State') {
      cy.get(activeTravelersPageSelectors.usState).click();
    }
    cy.allure().logStep('Verify impact table headers');
    const tableTitles = [
      'COVID-19 metrics',
      'Travelers',
      statusBy,
      'Vaccinated population (at least a single dose)',
      'complete dose',
      'Next 30 days',
      'Current',
      'Past 14 days',
      ''
    ];
    cy.verifyListContainsText(
      activeTravelersPageSelectors.coronaTableHeaders,
      tableTitles
    );
  }

  static searchForLocation(searchLocation: searchLocation) {
    cy.allure().logStep(`Search for location : ${searchLocation}`);
    cy.get(activeTravelersPageSelectors.searchButton).type(searchLocation);
    cy.get(activeTravelersPageSelectors.searchResultsTableData).contains(searchLocation);
  }

  static switchToCountriesView() {
    cy.allure().logStep('Switch to countries view');
    cy.get(activeTravelersPageSelectors.seeCountriesButton).click();
  }

  static verifyBottomPageDisclaimers() {
    cy.allure().logStep('Verify bottom page disclaimers');
    const bottomHeaders = [
      'Cancellation policy tracker',
      'Navan Community Forum',
      'Navan Blog'
    ];
    const bottomButtonHeaders = [
      'Visit policy tracker',
      'Visit the forum',
      'Visit the blog'
    ];
    cy.verifyListContainsText(
      activeTravelersPageSelectors.bottomResourceHeading,
      bottomHeaders
    );

    cy.verifyListContainsText(
      activeTravelersPageSelectors.bottomResourceButton,
      bottomButtonHeaders
    );
  }
}
