const adminGeneralPageSelectors = {
  spendSummary: 'app-spend-summary',
  pageTitle: '[qaid=pageTitle]',
  analysisTabButton: '[data-qaid=ANALYSIS-button]',
  travelSpendMenuItem: '[qaid=ANALYSIS_SPEND-menu-item]',
  travelSpendTotalValue: '[qaid="Travel spend__value"]',
  flightsMenuItem: '[qaid=ANALYSIS_FLIGHTS-menu-item]',
  flightSpendTotalValue: '[qaid="Flights spend__value"]',
  hotelsMenuItem: '[qaid=ANALYSIS_HOTELS-menu-item]',
  hotelsSpendTotalValue: '[qaid="Hotels spend__value"]',
  carbonMenuItem: '[qaid=ANALYSIS_EMISSIONS-menu-item]',
  carbonTotalSpendValues: '[qaid=CO2_EMISSIONS__value]',
  wellbeingMenuItem: '[qaid=ANALYSIS_WELLBEING-menu-item]',
  totalNightsAwayValue: '[qaid=TOTAL_NIGHTS_AWAY__value]',
  reportsTabButton: '[data-qaid=REPORTS-button]',
  bookingsMenuItem: '[qaid=BOOKINGS-menu-item]',
  bookingReportInvoiceColumn: '[qaid=table-column-bookingUuid]',
  reconcileMenuItem: '[qaid=RECONCILE-menu-item]',
  reconcileStatementCard: '[qaid=reconcile-statement-card]',
  reconcileHistoryCard: '[qaid=history-card]',
  rewardsMenuItem: '[qaid=REWARDS-menu-item]',
  rewardsTransactionReport: '[qaid=tripBucksReportTitle]',
  unusedCreditsMenuItem: '[qaid=UNUSED_TICKETS-menu-item]',
  unusedCreditsReportDownloadButton: '[qaid=downloadButton]',
  safetyTabButton: '[data-qaid=SAFETY-button]',
  covid19MenuItem: '[qaid=COVID19-menu-item]',
  covid19StatusTitle: '[qaid=covid19StatusTitle]',
  travelImpactMenuItem: '[qaid=TRAVEL_IMPACT-menu-item]',
  numberOfTravelers: '[qaid=travelersValue]',
  liveMapMenuItem: '[qaid=LIVE_MAP-menu-item]',
  liveMapSubtitle: '[qaid=live-map-subtitle]',
  travelerReportMenuItem: '[qaid=TRAVELER_REPORT-menu-item]',
  showTravelersButton: '[qaid=show-travelers-button]',
  settingTabButton: '[data-qaid=SETTINGS-button]',
  integrationsMenuItem: '[data-qaid=INTEGRATIONS]',
  apiCredentialsCardTitle: '[qaid=api-credentials-card-title]',
  expenseIntegrationCardTitle: '[qaid=expense-integration-card-title]',
  rewardsExportCsvButton: '[data-qaid=exportRewardsCsv]',
  travelAdminNavButton: '[data-qaid="ADMIN-button"]',
  tmcIntegrationCardTitle: '[qaid=tmc-integration-card-title]'
};

export class AdminGeneralCheck {
  static visitAdminDashboardPage() {
    cy.allure().logStep('Verify Admin dashboard page is loaded');
    cy.visit('app/admin2/en/dashboard');
    cy.url().should('include', '/dashboard');
  }

  private static elementShouldBeVisible(...elements: string[]) {
    elements.forEach((element) => {
      cy.get(element).should('be.visible');
    });
  }

  static checkTravelAdminNavPresence() {
    cy.allure().logStep('Verify Travel Admin button is present on the page');
    this.elementShouldBeVisible(adminGeneralPageSelectors.travelAdminNavButton);
  }

  static checkSpendOverviewPresence() {
    cy.allure().logStep('Verify Spend Summary card is loaded on Admin dashboard screen');
    this.elementShouldBeVisible(adminGeneralPageSelectors.spendSummary);
  }

  static checkTravelSpendPagePresence() {
    cy.allure().logStep('Verify Analysis -> Travel Spend page is loaded');
    cy.get(adminGeneralPageSelectors.analysisTabButton).click();
    cy.get(adminGeneralPageSelectors.travelSpendMenuItem).click();
    this.elementShouldBeVisible(adminGeneralPageSelectors.travelSpendTotalValue);
  }

  static checkFlightsPagePresence() {
    cy.allure().logStep('Verify Analysis -> Flights page is loaded');
    cy.get(adminGeneralPageSelectors.analysisTabButton).click();
    cy.get(adminGeneralPageSelectors.flightsMenuItem).click();
    this.elementShouldBeVisible(adminGeneralPageSelectors.flightSpendTotalValue);
  }

  static checkHotelsPagePresence() {
    cy.allure().logStep('Verify Analysis -> Hotels page is loaded');
    cy.get(adminGeneralPageSelectors.analysisTabButton).click();
    cy.get(adminGeneralPageSelectors.hotelsMenuItem).click();
    this.elementShouldBeVisible(adminGeneralPageSelectors.hotelsSpendTotalValue);
  }

  static checkCO2PagePresence() {
    cy.allure().logStep('Verify Analysis -> Carbon page is loaded');
    cy.get(adminGeneralPageSelectors.analysisTabButton).click();
    cy.get(adminGeneralPageSelectors.carbonMenuItem).click();
    this.elementShouldBeVisible(adminGeneralPageSelectors.carbonTotalSpendValues);
  }

  static checkTravelerWellBeingPagePresence() {
    cy.allure().logStep('Verify Analysis -> Traveler Well-being page is loaded');
    cy.get(adminGeneralPageSelectors.analysisTabButton).click();
    cy.get(adminGeneralPageSelectors.wellbeingMenuItem).click();
    this.elementShouldBeVisible(adminGeneralPageSelectors.totalNightsAwayValue);
  }

  static checkBookingReportPagePresence() {
    cy.allure().logStep('Verify Reports -> Booking report page is loaded');
    cy.get(adminGeneralPageSelectors.reportsTabButton).click();
    cy.get(adminGeneralPageSelectors.bookingsMenuItem).click();
    this.elementShouldBeVisible(adminGeneralPageSelectors.bookingReportInvoiceColumn);
  }

  static checkReconcilePagePresence() {
    cy.allure().logStep('Verify Reports -> Reconcile page is loaded');
    cy.get(adminGeneralPageSelectors.reportsTabButton).click();
    cy.get(adminGeneralPageSelectors.reconcileMenuItem).click();
    this.elementShouldBeVisible(
      adminGeneralPageSelectors.reconcileStatementCard,
      adminGeneralPageSelectors.reconcileHistoryCard
    );
  }

  static checkRewardsPagePresence() {
    cy.allure().logStep('Verify Reports -> Rewards page is loaded');
    cy.get(adminGeneralPageSelectors.reportsTabButton).click();
    cy.get(adminGeneralPageSelectors.rewardsMenuItem).click();
    this.elementShouldBeVisible(adminGeneralPageSelectors.rewardsExportCsvButton);
  }

  static checkUnusedCreditsPagePresence() {
    cy.allure().logStep('Verify Reports -> Unused Credits page is loaded');
    cy.get(adminGeneralPageSelectors.reportsTabButton).click();
    cy.get(adminGeneralPageSelectors.unusedCreditsMenuItem).click();
    this.elementShouldBeVisible(
      adminGeneralPageSelectors.unusedCreditsReportDownloadButton
    );
  }

  static checkCovid19PagePresence() {
    cy.allure().logStep('Verify Savefy -> Covid19 page is loaded');
    cy.get(adminGeneralPageSelectors.safetyTabButton).click();
    cy.get(adminGeneralPageSelectors.covid19MenuItem).click();
    this.elementShouldBeVisible(adminGeneralPageSelectors.covid19StatusTitle);
  }

  static checkTravelImpactDashboardPagePresence() {
    cy.allure().logStep('Verify Savefy -> Travel Impact dashboard page is loaded');
    cy.get(adminGeneralPageSelectors.safetyTabButton).click();
    cy.get(adminGeneralPageSelectors.travelImpactMenuItem).click();
    this.elementShouldBeVisible(adminGeneralPageSelectors.numberOfTravelers);
  }

  static checkLiveMapPagePresence() {
    cy.allure().logStep('Verify Savefy -> Live Map page is loaded');
    cy.get(adminGeneralPageSelectors.safetyTabButton).click();
    cy.get(adminGeneralPageSelectors.liveMapMenuItem).click();
    this.elementShouldBeVisible(adminGeneralPageSelectors.liveMapSubtitle);
  }

  static checkTravelerReportPresence() {
    cy.allure().logStep('Verify Savefy -> Traveler Report page is loaded');
    cy.get(adminGeneralPageSelectors.safetyTabButton).click();
    cy.get(adminGeneralPageSelectors.travelerReportMenuItem).click();
    this.elementShouldBeVisible(adminGeneralPageSelectors.showTravelersButton);
  }

  static checkIntegrationsPagePresence() {
    cy.allure().logStep('Verify Settings -> Integration page is loaded');
    cy.get(adminGeneralPageSelectors.settingTabButton).click();
    cy.get(adminGeneralPageSelectors.integrationsMenuItem).click();
    this.elementShouldBeVisible(
      adminGeneralPageSelectors.apiCredentialsCardTitle,
      adminGeneralPageSelectors.expenseIntegrationCardTitle,
      adminGeneralPageSelectors.tmcIntegrationCardTitle
    );
  }
}
