import { Timeouts } from '@utility-lib/index';
import { AmplitudeEvents } from './amplitude-events';

const companySetupSelectors = {
  setUpCompanyContinue:
    '.ta-sticky-footer ta-button-v2[class^="ta-sticky-footer__save-button"] button',
  setUpCompanySkip:
    '.ta-sticky-footer ta-button-v2[class^="ta-sticky-footer__cancel-button"] button',
  closeHrIntegrationSuggestion: 'ta-button-v2#closeReminder',
  bookTravel: 'ta-button-v2[text="Book travel"] button',
  adminExperienceModal: 'ta-modal[class^="ta-company-onboarded-admin-modal"]',
  exploreAdminDashboard: 'ta-button-v2[text="Explore admin dashboard"] button',
  scheduleCallButton: '[data-testid="adminModalScheduleCallButton"]',
  adminModalContinueAndCloseButton: '[data-testid="adminModalContinueButton"]',
  chilipiperModal: '#chilipiper-frame',
  viewAllBenefitsExpanderButton: '[data-testid="viewAllBenefits"]',
  viewLessBenefitsCollapseButton: '[data-testid="viewLessBenefits"]',
  inviteAdminXButton: '[data-testid="inviteAdmin"] > .ta-button-v2',
  goBackToAdminClaimedButton: '[data-testid="goBackToAdminClaimed"]',
  closeInviteAdminModalButton: '[data-testid="modal-header-close-button"]',
  inviteAdminModalGoToBookButton: '[data-testid="skipSendInviteAdminButton"]',
  navanVideo: '[data-testid="navanVideo"]',
  cardByNumber: (cardNumber: number) => {
    return '[data-testid="card-' + cardNumber + '"]';
  }
};

export class CompanySetup {
  static companySetupPolicy(): void {
    cy.allure().logStep('Configure company policy');
    cy.wait('@waitForAdminPolicies');
    for (let click = 0; click <= 7; click++) {
      cy.get(companySetupSelectors.setUpCompanyContinue)
        .wait(Timeouts.SHORT_TIMEOUT_3_SEC.timeout)
        .click();
    }
    cy.wait('@waitForSetupPolicy');
    AmplitudeEvents.addExpectedAmplitudeEvents(
      'admin open policy step',
      'admin select savings policy clicked'
    );
  }

  static verifyNavanVideoAndKeyBenefitsCardsExist(): void {
    cy.allure().logStep('verify Navan video and key benefits cards exist');

    cy.get(companySetupSelectors.navanVideo).should('be.visible');
    cy.wait(Timeouts.SHORT_TIMEOUT_2_SEC.timeout);
    const numberOfCards = 5; // this number will adjust based on needs, i.e.: number of cards
    const cardSelectors: string = Array.from({ length: numberOfCards }, (_, index) =>
      companySetupSelectors.cardByNumber(index)
    ).join(', ');
    cy.get(cardSelectors).should('be.visible');
  }

  static verifyNavanVideoAndKeyBenefitsCardsExistMobileWeb(): void {
    cy.allure().logStep('verify Navan video and key benefits cards exist on mobile-web');
    if (cy.get(companySetupSelectors.viewAllBenefitsExpanderButton).should('exist')) {
      cy.get(companySetupSelectors.viewAllBenefitsExpanderButton).click();
    }
    cy.get('[data-testid="navanVideo"]').should('be.visible');
    cy.wait(Timeouts.SHORT_TIMEOUT_2_SEC.timeout);
    const numberOfCards = 5; // this number will adjust based on needs, i.e.: number of cards
    const cardSelectors: string = Array.from({ length: numberOfCards }, (_, index) =>
      companySetupSelectors.cardByNumber(index)
    ).join(', ');
    cy.get(cardSelectors).should('be.visible');
  }

  static openAndCloseInviteAdminModal(): void {
    cy.allure().logStep('open and close invite admin modal');
    cy.get(companySetupSelectors.inviteAdminXButton).click();
    cy.get(companySetupSelectors.closeInviteAdminModalButton).click();
  }

  static skipAdminClaim(): void {
    cy.allure().logStep('open and skip invite admin modal');
    cy.get(companySetupSelectors.inviteAdminXButton).click();
    cy.get(companySetupSelectors.inviteAdminModalGoToBookButton).click();
  }

  static openAndCloseInviteAdminModalMobileWeb(): void {
    cy.allure().logStep('open and close invite admin modal');
    cy.get(companySetupSelectors.inviteAdminXButton).click();
    cy.get(companySetupSelectors.goBackToAdminClaimedButton).click();
  }
}
