import { LoginPage } from '@admin-lib/index';
import { CreateAccountPage, SignupPage } from '@onboarding-lib/index';
import { Random, Utility } from '@utility-lib/index';
import { RewardsPage } from '@profile-lib/rewards';

const newUserCredentials = Cypress.env('newUser').NEW_USER_PASSWORD;

describe('Trips: Signup flow', () => {
  let email: string;
  let personalEmail: string;
  beforeEach(() => {
    email = 'user' + '_' + Random.randomString() + '@staging.tripactions.xyz';
    personalEmail = 'personal' + '_' + Random.randomString() + '@staging.tripactions.xyz';
  });

  it('C365932 C365936: Should navigates to onboarding flow', { tags: ['@tier1'] }, () => {
    LoginPage.visitTALoginPage();
    LoginPage.initiateSignUpFlow(email);
    SignupPage.verifySignupEmailInInitiateSignupScreen(email);
    SignupPage.initiateSignup();
    SignupPage.verifySignupTriggerMessage(email);
    CreateAccountPage.completeOnboardingFlow(email, newUserCredentials);
    Utility.verifyPageTitle('Navan - Book a Trip');
  });

  it(
    'C2042574: Validate Navan Rewards Sign-up during onboarding',
    { tags: ['@tier2'] },
    () => {
      LoginPage.visitTALoginPage();
      LoginPage.initiateSignUpFlow(email);
      SignupPage.initiateSignup();
      CreateAccountPage.completeOnboardingFlow(email, newUserCredentials, personalEmail);
      Utility.verifyPageTitle('Navan - Book a Trip');
      RewardsPage.visitRewardsPage();
      RewardsPage.verifyRewardsEnabled();
    }
  );
});

describe('Expense only unified user onboarding', () => {
  let email: string;
  beforeEach(() => {
    email = 'user' + '_' + Random.randomString() + '@gteon6.xyz';
  });

  it(
    'C6367318: Verify email is shown as verified and first name, last name and password are validated and create account is disabled for Expense only User  ',
    { tags: ['@tier1'] },
    () => {
      LoginPage.visitTALoginPage();
      LoginPage.initiateSignUpFlow(email);
      SignupPage.verifySignupEmailInInitiateSignupScreen(email);
      SignupPage.initiateSignup();
      SignupPage.verifySignupTriggerMessage(email);
      CreateAccountPage.validateNameAndPwdInCreateAccount(
        email,
        'name123',
        'pass',
        'pass123'
      );
    }
  );

  it(
    'C6367322: Verify user is redirected to Expense only page for Expense only user and Confetti is Shown after 1st time login ',
    { tags: ['@tier1'] },
    () => {
      LoginPage.visitTALoginPage();
      LoginPage.initiateSignUpFlow(email);
      SignupPage.verifySignupEmailInInitiateSignupScreen(email);
      SignupPage.initiateSignup();
      SignupPage.verifySignupTriggerMessage(email);
      CreateAccountPage.completeUnfiedOnboardingCreateAccount(email, newUserCredentials);
      Utility.verifyPageTitle('All transactions · Navan Expense');
    }
  );
});

describe('Travel & Expense unified user onboarding', () => {
  let email: string;
  beforeEach(() => {
    email = 'user' + '_' + Random.randomString() + '@gtne1.xyz';
  });

  it(
    'C6367316: Verify email is shown as verified and first name, last name and password are validated and create account is disabled for T& E User ',
    { tags: ['@tier1'] },
    () => {
      LoginPage.visitTALoginPage();
      LoginPage.initiateSignUpFlow(email);
      SignupPage.verifySignupEmailInInitiateSignupScreen(email);
      SignupPage.initiateSignup();
      SignupPage.verifySignupTriggerMessage(email);
      CreateAccountPage.validateNameAndPwdInCreateAccount(
        email,
        'name123',
        'pass',
        'pass123'
      );
    }
  );

  it(
    'C6367320: Verify user is redirected to Travel Home page, trips& expense tabs are shown for T&E user after 1st time login    ',
    { tags: ['@tier1'] },
    () => {
      LoginPage.visitTALoginPage();
      LoginPage.initiateSignUpFlow(email);
      SignupPage.verifySignupEmailInInitiateSignupScreen(email);
      SignupPage.initiateSignup();
      SignupPage.verifySignupTriggerMessage(email);
      CreateAccountPage.completeUnfiedOnboardingCreateAccount(email, newUserCredentials);
      Utility.verifyPageTitle('Navan - Book a Trip');
    }
  );
});
