import { LoginPage } from '@admin-lib/login';
import { DelegateInfo } from '@profile-lib/delegate-info';
import { Utility } from '@utility-lib/utility';

const TravelPlannerSelector = {
  eaTripOnboarding: '.ea-trips-onboarding',
  dismissModal: '.ta-button__content',
  addTravelerButton: '[data-testid="addButtonFooter"]',
  addExistingTraveler: '.ng-star-inserted',
  selectTraveler: '.ta-travel-planner-add-user-modal__body-results-list__action',
  saveTravelerSelection: '[data-testid="ta-travel-planner-add-user-modal-save-button"]',
  editProfileButton: '[data-testid="editProfile"]',
  newTripButton: '[data-testid="newTrip"]',
  seeAllTrips: '.itinerary-information__trips-link',
  contactInfo: '.ta-profile-side-nav__text',
  backArrow: '.back-arrow'
};
const newUserPassword = Cypress.env('newUser').NEW_USER_PASSWORD;

export class TravelPlanner {
  static visitTravelPlannerPage(): void {
    cy.allure().logStep('Visit profile page on contact info tab');
    cy.visit('app/user2/trips/delegate');
  }

  static assignDelegateAndViewTravelPlanner(): void {
    LoginPage.createNewTravelerAndLogin();
    DelegateInfo.visitProfileContactInfo();
    DelegateInfo.getDataFromCachedAdminUserAndSetHimAsDelegatedUser();
    Utility.loginAsAdmin(newUserPassword);
    Utility.visitSearchPage();
    TravelPlanner.visitTravelPlannerPage();
  }

  static verifyEaTripOnboardingShown(): void {
    cy.allure().logStep('Verify EA trips onboarding is shown');
    cy.get(TravelPlannerSelector.eaTripOnboarding).should('be.visible');
  }

  static dismissEaTripOnboarding(): void {
    cy.allure().logStep('Dismiss EA trips onboarding modal');
    cy.get(TravelPlannerSelector.dismissModal).contains('Next').click();
  }
  static acceptEaTripOnboarding(): void {
    cy.allure().logStep('Dismiss EA trips onboarding modal');
    cy.get(TravelPlannerSelector.dismissModal).contains('Got it').click();
  }

  static acceptOnboardingAndBookmarkTraveler(): void {
    cy.allure().logStep('Verify EA trips onboarding is shown');
    TravelPlanner.dismissEaTripOnboarding();
    TravelPlanner.dismissEaTripOnboarding();
    TravelPlanner.acceptEaTripOnboarding();
    TravelPlanner.clickAddExistingTraveler();
    TravelPlanner.addRecentTraveler();
  }
  static clickAddExistingTraveler(): void {
    cy.allure().logStep('Click add existing traveler tab');
    cy.get(TravelPlannerSelector.addTravelerButton).click();
    cy.get(TravelPlannerSelector.addExistingTraveler)
      .contains('Add existing traveler')
      .click();
  }

  static addRecentTraveler(): void {
    cy.allure().logStep('Add recent traveler');
    cy.get(TravelPlannerSelector.selectTraveler).click();
    cy.get(TravelPlannerSelector.saveTravelerSelection).click();
  }

  static clickEditProfile(): void {
    cy.allure().logStep('Click edit profile button');
    cy.get(TravelPlannerSelector.editProfileButton).click();
  }

  static clickNewTrip(): void {
    cy.allure().logStep('Click new trip button');
    cy.get(TravelPlannerSelector.newTripButton).click();
  }

  static seeAllTrips(): void {
    cy.allure().logStep('Click see all trips link');
    cy.get(TravelPlannerSelector.seeAllTrips).click();
  }

  static visitTravelerContactInfo(): void {
    cy.allure().logStep('Visit delegate can see traveler contact info');
    cy.get(TravelPlannerSelector.contactInfo).contains('Contact info').click();
  }

  static visitTravelerInfo(): void {
    cy.allure().logStep('Visit delegate can see traveler info');
    cy.get(TravelPlannerSelector.contactInfo).contains('Traveler info').click();
  }

  static visitTravelerPaymentMethods(): void {
    cy.allure().logStep('Visit delegate can see traveler payment methods');
    cy.get(TravelPlannerSelector.contactInfo).contains('Payment methods').click();
  }

  static visitTravelerLoyaltyPrograms(): void {
    cy.allure().logStep('Visit delegate can see traveler loyalty programs');
    cy.get(TravelPlannerSelector.contactInfo).contains('Loyalty programs').click();
  }

  static visitTravelerNotifications(): void {
    cy.allure().logStep('Visit delegate can see traveler notifications');
    cy.get(TravelPlannerSelector.contactInfo).contains('Notifications').click();
  }

  static backToTravelPlanner(): void {
    cy.allure().logStep('navigate back to travel planner from edit profile');
    cy.get(TravelPlannerSelector.backArrow).click();
  }
}
