import { GrowthInterceptApis } from '@growth-lib/api-intercept';
import { LoginSelfSell, SignupReason, UserRole } from '@support-growth/login-self-sell';
import { SignUp } from '@growth-lib/sign-up';
import { AmplitudeEvents } from '@growth-lib/amplitude-events';
import { DelegatePage } from '@growth-lib/delegate-page';
import { HomePage } from '@rebranded_home_page-lib/home-page';
import { Timeouts } from '@utility-lib/constants';
import { AdminClaim } from '@growth-lib/admin-claim';
import { FreePricing } from '@growth-lib/free-pricing';
import { GrowthUtilities } from '@growth-lib/growth-utilities';

describe('Growth: new sign-up flow with signupReason and role', () => {
  beforeEach(() => {
    GrowthInterceptApis.interceptApis();
  });

  let token: string;
  let companyDomainWithFewUser: string;

  it('C11004495: Onboard self sell user with signupReason: BOOK_FOR_OTHERS', { tags: ['@tier1'] }, () => {
    LoginSelfSell.createNewSelfSellLead({
      signupReason: SignupReason.BOOK_FOR_OTHERS
    }).then((login) => {
      token = login.token;
      companyDomainWithFewUser = login.companyDomain;
      SignUp.fillSignUpForm(token);
      DelegatePage.verifyDelegateHomePageOpened();
      AmplitudeEvents.expectAmplitudeEventsToBeSent();
    });
  });

  it(
    'C11004899: Onboard self sell user with signupReason: BOOK_FOR_OTHERS twice in the same company',
    { tags: ['@tier1'] },
    () => {
      LoginSelfSell.createNewSelfSellLead({
        tag: GrowthUtilities.generateRandomTag(),
        companyDomain: companyDomainWithFewUser,
        signupReason: SignupReason.BOOK_FOR_OTHERS
      }).then((login) => {
        const local_token = login.token;
        SignUp.fillSignUpForm(local_token);
        FreePricing.openPricing();
        FreePricing.openAdminClaim();
        AdminClaim.fillAdminClaim();
        cy.wait(Timeouts.MEDIUM_TIMEOUT_10_SEC.timeout);
        HomePage.verifyHomePage();
        AmplitudeEvents.expectAmplitudeEventsToBeSent();
      });
    }
  );

  it(
    'C11004900: Onboard self sell user with signupReason: TRAVEL_SOLUTION and userRole: EXECUTIVE_ASSISTANCE',
    { tags: ['@tier1'] },
    () => {
      LoginSelfSell.createNewSelfSellLead({
        signupReason: SignupReason.TRAVEL_SOLUTION,
        userRole: UserRole.EXECUTIVE_ASSISTANCE
      }).then((login) => {
        const local_token = login.token;
        companyDomainWithFewUser = login.companyDomain;
        SignUp.fillSignUpForm(local_token);
        FreePricing.verifyTravelPricingScreenIsOpened(true);
        FreePricing.openAdminClaim();
        AdminClaim.fillAdminClaim();
        cy.wait(Timeouts.MEDIUM_TIMEOUT_10_SEC.timeout);
        DelegatePage.verifyDelegateHomePageOpened();
        AmplitudeEvents.expectAmplitudeEventsToBeSent();
      });
    }
  );

  it(
    'C11233314: Onboard self sell user with signupReason: TRAVEL_SOLUTION and userRole: EXECUTIVE_ASSISTANCE, a second user will be rogue',
    { tags: ['@tier1'] },
    () => {
      LoginSelfSell.createNewSelfSellLead({
        tag: GrowthUtilities.generateRandomTag(),
        companyDomain: companyDomainWithFewUser,
        signupReason: SignupReason.TRAVEL_SOLUTION,
        userRole: UserRole.EXECUTIVE_ASSISTANCE
      }).then((login) => {
        const local_token = login.token;
        companyDomainWithFewUser = login.companyDomain;
        SignUp.fillSignUpForm(local_token);
        cy.wait(Timeouts.SHORT_TIMEOUT_5_SEC.timeout);
        HomePage.verifyHomePage();
      });
    }
  );

  it(
    'C11068081: Onboard self sell user with signupReason: BOOK_TRIP and userRole: TRAVELER',
    { tags: ['@tier1'] },
    () => {
      LoginSelfSell.createNewSelfSellLead({
        signupReason: SignupReason.BOOK_TRIP,
        userRole: UserRole.TRAVELER
      }).then((login) => {
        const local_token = login.token;
        companyDomainWithFewUser = login.companyDomain;
        SignUp.fillSignUpForm(local_token);
        cy.wait(Timeouts.MEDIUM_TIMEOUT_10_SEC.timeout);
        HomePage.verifyHomePage();
        AmplitudeEvents.expectAmplitudeEventsToBeSent();
      });
    }
  );

  it(
    'C11233315: Onboard self sell user with signupReason: BOOK_TRIP and userRole: TRAVELER, mobile-web - a second rogue user',
    { tags: ['@tier1'] },
    () => {
      LoginSelfSell.createNewSelfSellLead({
        tag: GrowthUtilities.generateRandomTag(),
        companyDomain: companyDomainWithFewUser,
        signupReason: SignupReason.BOOK_TRIP,
        userRole: UserRole.TRAVELER
      }).then((login) => {
        const local_token = login.token;
        SignUp.fillSignUpFormMobileWeb(local_token);
        SignUp.continueOnDesktop();
        AmplitudeEvents.expectAmplitudeEventsToBeSent();
      });
    }
  );

  it(
    'C11068082: Onboard self sell user with signupReason: TRAVEL_AND_EXPENSE_SOLUTION and userRole: OPERATIONS',
    { tags: ['@tier1'] },
    () => {
      LoginSelfSell.createNewSelfSellLead({
        signupReason: SignupReason.TRAVEL_AND_EXPENSE_SOLUTION,
        userRole: UserRole.OPERATIONS
      }).then((login) => {
        const local_token = login.token;
        companyDomainWithFewUser = login.companyDomain;
        SignUp.fillSignUpForm(local_token);
        FreePricing.verifyExpensePricingScreenIsOpened();
      });
    }
  );

  it(
    'C11233316: Onboard self sell user with signupReason: TRAVEL_AND_EXPENSE_SOLUTION and userRole: OPERATIONS, a second user',
    { tags: ['@tier1'] },
    () => {
      LoginSelfSell.createNewSelfSellLead({
        tag: GrowthUtilities.generateRandomTag(),
        companyDomain: companyDomainWithFewUser,
        signupReason: SignupReason.TRAVEL_AND_EXPENSE_SOLUTION,
        userRole: UserRole.OPERATIONS
      }).then((login) => {
        const local_token = login.token;
        SignUp.fillSignUpForm(local_token);
        FreePricing.verifyExpensePricingScreenIsOpened();
      });
    }
  );

  it('C11068083: Onboard self sell user with signupReason: TRAVEL_SOLUTION', { tags: ['@tier1'] }, () => {
    LoginSelfSell.createNewSelfSellLead({
      signupReason: SignupReason.TRAVEL_SOLUTION
    }).then((login) => {
      const local_token = login.token;
      companyDomainWithFewUser = login.companyDomain;
      SignUp.fillSignUpForm(local_token);
      FreePricing.verifyTravelPricingScreenIsOpened();
      AmplitudeEvents.expectAmplitudeEventsToBeSent();
    });
  });

  it(
    'C11233317: Onboard self sell user with signupReason: TRAVEL_SOLUTION, a second user',
    { tags: ['@tier1'] },
    () => {
      LoginSelfSell.createNewSelfSellLead({
        tag: GrowthUtilities.generateRandomTag(),
        companyDomain: companyDomainWithFewUser,
        signupReason: SignupReason.TRAVEL_SOLUTION
      }).then((login) => {
        const local_token = login.token;
        SignUp.fillSignUpForm(local_token);
        FreePricing.verifyTravelPricingScreenIsOpened();
        AmplitudeEvents.expectAmplitudeEventsToBeSent();
      });
    }
  );

  it('C11068084: Onboard self sell user with signupReason: TEAM_OFFSITE', { tags: ['@tier1'] }, () => {
    LoginSelfSell.createNewSelfSellLead({
      signupReason: SignupReason.TEAM_OFFSITE
    }).then((login) => {
      const local_token = login.token;
      SignUp.fillSignUpForm(local_token);
      FreePricing.verifyTravelPricingScreenIsOpened();
      AmplitudeEvents.expectAmplitudeEventsToBeSent();
    });
  });

  it('C11233318: Onboard self sell user with signupReason: TEAM_OFFSITE, a second user', { tags: ['@tier1'] }, () => {
    LoginSelfSell.createNewSelfSellLead({
      signupReason: SignupReason.TEAM_OFFSITE
    }).then((login) => {
      const local_token = login.token;
      SignUp.fillSignUpForm(local_token);
      FreePricing.verifyTravelPricingScreenIsOpened();
      AmplitudeEvents.expectAmplitudeEventsToBeSent();
    });
  });
});
