import { OnboardingGuide } from '@growth-lib/onboarding-guide';
import {
  cardNumber,
  paymentMethodData
} from '@fixtures/payment-method/payment-method-data';
import { AdminPayment } from '@admin-lib/settings/payment-method';
import { ONBOARDING_GUIDE_SELECTORS } from './onboarding-guide.utils';

const reviewTravelPaymentSelectors = {
  reviewTravelPaymentNextButtons: '[data-testid="wizardPrimaryAction"]'
};

const backupCard = paymentMethodData.creditCard.givenName;

export class TravelPaymentMethod {
  static travelPaymentStepName = [
    'Travel payment methods',
    'Select a card type',
    'Step 1 - Choose a card name',
    'Step 2 - Set the card’s availability',
    'Step 3 - Set the card’s availability by booking type'
  ];

  static reviewTravelPaymentNext(): void {
    cy.get(reviewTravelPaymentSelectors.reviewTravelPaymentNextButtons).click();
  }

  static fillCardDetails(): void {
    AdminPayment.clickAddCard('SETTINGS_ADD_NEW_CARD');
    AdminPayment.enterNickname(backupCard);
    AdminPayment.enterCardInfo();
    AdminPayment.enterBillingAddressInfo();
    AdminPayment.enterCardNumber(cardNumber.amex);
    AdminPayment.enterCardCVC('2468');
    AdminPayment.clickBottomButton('Save');
  }

  static fillOnboardingTaskTravelPaymentForTravelAndExpense(): void {
    OnboardingGuide.completeAddAddressTask();
    OnboardingGuide.openOnboardingGuide();
    OnboardingGuide.clickOn(ONBOARDING_GUIDE_SELECTORS.getStartedSetupTravelPaymentMethod);

    this.travelPaymentStepName.forEach((name) => {
      cy.allure().logStep(name);
      this.reviewTravelPaymentNext();
    });
    this.fillCardDetails();
  }
}
