import {
  GrowthInterceptApis,
  LoginSelfSell,
  SignUp,
  AmplitudeEvents,
  SignupReason
} from '@growth-lib/index';
import { Utility } from '@utility-lib/utility';
import { EventsPage } from '@group-events-lib/events_page';
import { CreateEvent } from '@group-events-lib/create_event';
import { EventWithTravelWindowsParams } from '@group-events-lib/interface';
import { EventDetails } from '@group-events-lib/event_details';
import { TeamOffsite } from '@growth-lib/team-offsite';

describe('Growth: team offsite', () => {
  let token: string;
  let companyDomain: string;
  let tripId: string;
  beforeEach(() => {
    GrowthInterceptApis.interceptApis();
    LoginSelfSell.createNewSelfSellLead().then((login) => {
      token = login.token;
      companyDomain = login.companyDomain;
    });
  });

  it('C8881942: create team offsite', { tags: ['@tier1'] }, () => {
    SignUp.signupWithSkipAdmin(token, SignupReason.BOOK_TRIP, false);

    const params: EventWithTravelWindowsParams = {
      location: 'Zurich',
      eventName: 'Zurich event',
      eventStartDate: '12',
      eventEndDate: '15',
      departureDate: '10',
      returnDate: '17',
      latestArrivalTime: '8:00 AM',
      earliestReturningTime: '7:00 PM'
    };

    Utility.openTeamOffsitePage();
    EventsPage.clickCreateEvent();
    CreateEvent.selectSelfSellEventLocation(params.location);
    CreateEvent.setEventTitle(params.eventName);
    CreateEvent.setEventDates(params.eventStartDate, params.eventEndDate);
    CreateEvent.clickNextButton();

    EventDetails.openAddParticipantsModal();
    EventDetails.typeAndAddOneParticipant('newMember' + '@' + companyDomain);
    EventDetails.sendInvite();

    cy.wait('@waitForAddInviters').then((interception) => {
      tripId = interception.response?.body?.invitations?.content[0]?.tripIds[0];
    });

    AmplitudeEvents.expectAmplitudeEventsToBeSent();
  });

  it('C8881943: sign up as invitee', { tags: ['@tier1'] }, () => {
    SignUp.visitSignUp(token, 'MARKETING_PAGE', false, null, tripId);
    SignUp.fillUserDetail();
    SignUp.clickSubmit();

    TeamOffsite.verifyTeamOffsiteHomePageOpened();
    TeamOffsite.verifyTripInvitationTitle();
  });
});
