// selectors ------------------------------------------------

type CommonSelectors = {
  alertTitle: string;
  alertModalSubmitButton: string;
  checkbox: string;
  checkboxLabel: string;
  dropdownContainer: string;
  dropdownIcon: string;
  heading: string;
  paneBody: string;
  paneHeader: string;
  selectOption: string;
  toastMessage: string;
  toastCloseButton: string;
  windowAlert: string;
  body: string;
  paneModalCrossIcon: string;
  inputField: string;
  alertConfirmationText: string;
  alertCancelButton: string;
  alertModalCrossIcon: string;
  saveChangesButton: string;
  cancelButton: string;
  inputFieldError: string;
  selectDropDownError: string;
  subTitleHeading: (index: number) => string;
  noDataTitle: string;
  noDataDescription: string;
  backdrop: string;
  menuBarHeading: string;
  tabItem: string;
  dropdownWrapper: (index: number) => string;
  toggleButton: string;
  tooltip: string;
  articlePageTitle: string;
  labelInputError: string;
  urlInputError: string;
  noDataPrimaryButton: string;
  modalHeader: string;
  nameInputError: string;
  selectContainer: string;
  dropdownMenu: string;
  nthDropdownIcon: (index: number) => string;
  sidebarToggle: string;
  customDataCy: (name: string) => string;
  leftSubHeader: string;
  subheader: string;
  settingsLink: string;
  nthInputField: (index: number) => string;
  nthTabItem: (index: number) => string;
  ticketFieldTextInput: (label: string) => string;
};
type MemberSelectors = {
  activatedMembersButton: string;
  activateOrDeactivateMember: string;
  columnCheckBox: string;
  continueButton: string;
  deactivatedAgentsButton: string;
  dropDownIcon: string;
  editButton: string;
  email: string;
  menuBarHeading: string;
  membersTab: string;
  name: string;
  newButton: string;
  role: string;
  roleLabel: (role: string) => string;
  searchTextField: string;
  submitButton: string;
  columnsButton: string;
  columnsDropdownContainer: string;
  emailDropdownItemLabel: string;
  roleDropdownItemLabel: string;
  inviteStatusDropdownItemLabel: string;
  heading: string;
  activateButton: string;
  deactivateButton: string;
  rolesButton: string;
  statusTag: string;
};
type MemberFormSelectors = {
  emailTextField: string;
  firstNameTextField: string;
  lastNameTextField: string;
  emailInput: string;
  emailErrorField: string;
  cancelButton: string;
};
type LoginSelectors = {
  appleAuthenticationButton: string;
  emailTextField: string;
  googleAuthenticationButton: string;
  githubAuthenticationButton: string;
  loginViaEmailButton: string;
  otpField: string;
  passwordTextField: string;
  rememberMeCheckBox: string;
  submitButton: string;
  twitterAuthenticationButton: string;
};
type ProfileSelectors = {
  tab: string;
  logoutLink: string;
  profileOptionsContainer: string;
  myProfileButton: string;
  organizationSettingsButton: string;
  appSwitcherBody: string;
  sidebarInfo: string;
  appSwitcherBackButton: string;
};
interface TableSelectors {
  nthColumn: (n: number) => string;
  tableBody: string;
  tableHeader: string;
  tableRow: string;
  spinner: string;
  nthHeading: (n: number) => string;
}
type SignUpSelectors = {
  emailTextField: string;
  firstNameTextField: string;
  lastNameTextField: string;
  organizationNameTextField: string;
  organizationSubmitButton: string;
  otpTextBox: string;
  profileSubmitButton: string;
  signupViaEmailButton: string;
  submitButton: string;
  subdomainNameTextField: string;
  subdomainError: string;
};
type HelpIconSelectors = {
  helpButton: string;
  documentationButton: string;
  keyboardShortcutButton: string;
  chatButton: string;
  whatsNewButton: string;
  whatsNewWidgetInfo: string;
  whatsNewWidgetCloseButton: string;
  keyboardShortcutPaneHeading: string;
  keyboardShortcutPaneCrossIcon: string;
};
type ChatWidgetSelectors = {
  chatWidgetHomeCard: string;
  widgetSubmitButton: string;
  chatBubbleMessage: string;
  chatCloseButton: string;
  widgetIframe: string;
};
type NeetoEditorSelectors = {
  boldOption: string;
  italicOption: string;
  underlineOption: string;
  strikeOption: string;
  codeBlockOption: string;
  highlightOption: string;
  linkInput: string;
  linkSubmitButton: string;
  commandList: (index: number) => string;
  imageUploadUrlSubmitButton: string;
  imageUploadUrlInputTextField: string;
  uploadInput: string;
  editorMenuBarWrapper: string;
  undoOption: string;
  redoOption: string;
  imageWrapper: string;
};
type IpRestrictionSelectors = {
  addButton: string;
  ipStartTextField: (index: number) => string;
  ipEndTextField: string;
  cancelButton: string;
  ipRangeRow: string;
  enableIpRestrictionCheckbox: string;
};
type RolesSelectors = {
  newButton: string;
  proceedButton: string;
  cancelButton: string;
  tableHeaderRoleName: string;
  nameTextField: string;
  searchTextField: string;
  updateRolePaneHeading: string;
  updateRoleCancelButton: string;
  descriptionTextField: string;
  permissionCategoryTitle: string;
  headerColumn: string;
  dropDownIcon: string;
  tableHeaderRoleTitle: string;
};
type TagsSelectors = {
  newTagButton: string;
  tagNameTextField: string;
  editButton: string;
  deleteButton: string;
  cancelButton: string;
  submitButton: string;
  searchTextField: string;
  descriptionTextArea: string;
};
type MergeTagsSelectors = {
  mergeTagsButton: string;
  mergeButton: string;
  sourceSearchTextField: string;
  sourceTagsList: string;
  destinationTagsList: string;
  destinationSearchTextField: string;
  cancelButton: string;
  proceedButton: string;
  disabledTag: string;
};
type NeetoFiltersSelectors = {
  emailSelectContainer: string;
  filterPaneHeading: string;
  neetoFiltersEmailBlock: string;
  neetoFiltersRoleBlock: string;
  neetoFiltersBarClearButton: string;
  neetoFiltersNameFilterField: string;
  neetoFilterNameBlock: string;
  roleSelectContainer: string;
  filterButton: string;
  filtersClearButton: string;
  filterDoneButton: string;
  filteredMembersCount: string;
  allMenubarBlock: string;
  filtersEmailFilter: string;
  paneModalCrossIcon: string;
};

// texts ------------------------------------------------
type CommonTexts = {
  activate: string;
  block: string;
  copiedToClipboard: string;
  crossSiteScript: string;
  deactivate: string;
  delete: string;
  delete1: string;
  edit: string;
  invalidEmailMessage: string;
  invalidSearchInput: string;
  logout: string;
  new: string;
  takeAction: string;
  unblock: string;
  emailRequiredError: string;
  emailTakenMessage: string;
  nameTakenMessage: string;
  all: string;
  proceed: string;
  settings: string;
  unsavedChangesAlertTitle: string;
  unsavedChangesAlertMessage: string;
  clearFilters: string;
  filters: string;
  descriptionRequiredMessage: string;
  deactivated: string;
  nameExistsMsg: string;
  cancel: string;
  continue: string;
};
type MemberText = {
  addMember: string;
  admin: string;
  agent: string;
  agents: string;
  activeMembersHeading: string;
  accountActivatedToastMessage: string;
  activateMember: string;
  activateMemberAlertMessage: string;
  addMemberToProducts: string;
  deactivateAccountToastMessage: string;
  deactivateMember: string;
  deactivateMemberAlertMessage: string;
  editMember: string;
  inviteMessage: string;
  memberAddedMessage: string;
  members: string;
  newHeading: string;
  updatedMemberRole: string;
  searchMembers: string;
  noDataTitle: string;
  editor: string;
  changeRole: string;
  changeRoleAlertMsg: string;
  collaborator: string;
};
type MemberTableTexts = {
  created: string;
  email: string;
  name: string;
  role: string;
  teams: string;
};
type MemberFormErrorTexts = {
  emailRequired: string;
  emailInvalid: string;
  removeInvalidEmail: string;
};
type SignUpTexts = {
  email: string;
  profile: string;
  tryItFree: string;
};
type Environment = {
  development: string;
  staging: string;
};
type HelpIconTexts = {
  documentation: string;
  welcome: string;
  keyboardShortcuts: string;
  liveChat: string;
  newConversation: string;
  chatMessage: string;
  whatsNew: string;
  whatsNewHeading: string;
};
type ProfileTexts = {
  logout: string;
  productSwitcher: string;
  chooseYourNeetoProduct: string;
  myProfile: string;
  profileSettings: string;
  myOrganization: string;
};
type RolesTexts = {
  newRole: string;
  editRole: string;
  nameRequiredErrorMessage: string;
  deleteRole: string;
  alertMessage: (roleName: string) => string;
  adminPermissionsNotBeChangeMessage: string;
  manageRoles: string;
  manageRolesAndPermissions: string;
  roles: string;
  noRolesText: string;
  searchRoles: string;
  namePlaceholder: string;
  descriptionPlaceholder: string;
};
type TagsTexts = {
  articleTags: string;
  addNewTag: string;
  createTag: string;
  editTag: string;
  alertMessage: (tagName: string) => string;
  tagNameRequiredMessage: string;
  alertTitle: string;
  noTagsFoundText: string;
  manageTags: string;
  createAndManageTags: string;
  searchPlaceHolder: string;
  noTagsText: string;
  mergeTags: string;
  mergeTagsAlertMessage: (sourceTag: string, destinationTag: string) => string;
};

// fixtures ---------------------------------------------

type Fake = {
  firstName: string;
  middleName: string;
  lastName: string;
  companyName: string;
  fullName: string;
  email: string;
  streetAddress: string;
  streetName: string;
  city: string;
  zipCode: string;
  country: string;
  sentence: string;
  number: number;
  amount: number;
  projectName: string;
  department: string;
  word: string;
  words: string;
  randomString: string;
  state: string;
  quantity: number;
  randomDay: number;
  percentage: number;
  uniqueName: string;
  uniqueDepartment: string;
  phoneNumber: (format: string) => string;
  url: string;
  secureUrl: string;
  domain: string;
  otp: number;
  longNumber: number;
  decimalNumber: number;
};

// utils ------------------------------------------------

// Utils: common
export function initCustomCommands(): void;
export function dataCy(dataCyId: string): string;
export function getTestTitle(): string;
export function getUrl(path: string): string;
export function initializeCredentials(props: {
  businessName: string;
  currentUserName: string;
  email: string;
  firstName: string;
  lastName: string;
  domain: string;
  subdomainName: string;
  skipSetup: boolean;
}): string;
/**
 *
 * The joinHyphenCase function joins an array of strings using hyphens as the
 *
 * delimiter and returns the resulting string.
 *
 * Any number of string arguments.
 *
 * @example 
 *
 * joinHyphenCase("hello", "world"); // output: "hello-world"
 * @endexample
*/
export function joinHyphenCase(string: string | string[]): string;
export function setListCount(countSelector: string, alias: string): void;
export function verifyListCount(countSelector: string, count: number): string;

// Utils: organization
export function createOrganization(props: {
  appName: string;
  businessName: string;
  email: string;
  firstName: string;
  lastName: string;
  subdomainName: string;
}): void;

// Utils: validation
export function verifyCrossSiteScript(inputSelector: string, submitSelector: string): void;

// exporting all utils
export const authUtils: {
  verifySSOLoginPage: () => void;
  logout: (homeUrl: string) => void;
};
export const dateUtils: {
  currentDate: () => string;
  futureDate: (numberOfDays: number) => string;
  pastDate: (numberOfDays: number) => string;
};
type AddMemberViaUIPropsType = {
  email: string;
  role: string;
  appName: string;
};
type AddMemberViaRequestPropsType = {
  email: string;
  role: string;
  requestCount: number;
  appName: string;
};
type ActivateMembersPropsType = {
  email: string;
  name: string;
  skipSearchRequest: boolean;
};
type UpdateMembersPropsType = {
  email: string;
  role: string;
  skipSearchRequest: boolean;
};
type VerifyMembersPropsType = {
  email: string;
  role: string;
  skipSearchRequest: boolean;
};
type DeactivateMembersPropsType = {
  email: string;
  name: string;
  skipSearchRequest: boolean;
};
type EditMemberPropsType = {
  email: string;
  newRole: string;
  firstName: string;
  lastName: string;
  skipSearchRequest: boolean;
  updateCount: number;
};
type EditMemberViaRequestPropsType = {
  email: string;
  newRole: string;
  firstName: string;
  lastName: string;
  requestCount: number;
};
type VerifyTabMenuPropsType = {
  tabSelector: string;
  toolTiptext: string;
  alias: string;
  requestCount: number;
};
type VerifyHelpDocumentationLinkPropsType = {
  url: string;
  articleTitle: string;
  alias: string;
  requestCount: number;
};
interface VerifyMyProfileTabPropTypes {
  alias: string;
  requestCount?: number;
}
type Environments = {
  isDevelopment: boolean;
  isReview: boolean;
  isStaging: boolean;
  isProduction: boolean;
  isNightly: boolean;
  tld: string;
};
type SendEmailPropsType = {
  to: string;
  subject: string;
  body: string;
  senderName: string;
};
export const memberUtils: {
  addMemberViaRequest: (props: AddMemberViaRequestPropsType) => void;
  addMemberViaUI: (props: AddMemberViaUIPropsType) => void;
  activateMember: (props: ActivateMembersPropsType) => void;
  editMemberViaUI: (props: EditMemberPropsType) => void;
  editMemberViaRequest: (props: EditMemberViaRequestPropsType) => void;
  deactivateMember: (props: DeactivateMembersPropsType) => void;
  checkColumnAndVerifyTableHeader: (fieldSelector: string) => void;
  deactivateMemberViaRequest: (email: string, requestCount: number) => void;
  updateMemberRole: (props: UpdateMembersPropsType) => void;
  interceptMemberApi: (alias: string, times: number) => void;
  navigateToMembersPage: (waitForRequest: boolean) => void;
  unCheckColumnAndVerifyTableHeader: (fieldSelector: string) => void;
  verifyMemberDetails: (props: VerifyMembersPropsType) => void;
  clickOnColumnIcon: (props: clickOnColumnIcon) => void;
};
export const navigationUtils: {
  verifyTabMenu: (props: VerifyTabMenuPropsType) => void;
  clickOnHelpSubTab: (tabSelector: string, tabText: string) => void;
  verifyHelpDocumentationLink: (props: VerifyHelpDocumentationLinkPropsType) => void;
  verifyKeyboardShortcutsPane: () => void;
  verifyWhatsNewTab: (whatsNewHeading: string) => void;
  verifyChatWithUsTab: () => void;
  verifyMyProfileTab: (props: VerifyMyProfileTabPropTypes) => void;
  verifyOrganizationTab: () => void;
  openProfileOrHelpCenter: (props: OpenProfileOrHelpCenterPropTypes) => void;
  openWhatsNewPane: (props: OpenWhatsNewPanePropTypes) => void;
};
export const emailUtils: {
  sendEmail: (props: SendEmailPropsType) => void;
};

// exporting all selectors

export const commonSelectors: CommonSelectors;
export const memberSelectors: MemberSelectors;
export const loginSelectors: LoginSelectors;
export const profileSelectors: ProfileSelectors;
export const tableSelectors: TableSelectors;
export const signUpSelectors: SignUpSelectors;
export const memberFormSelectors: MemberFormSelectors;
export const helpIconSelectors: HelpIconSelectors;
export const chatWidgetSelectors: ChatWidgetSelectors;
export const mergeTagsSelectors: MergeTagsSelectors;
export const tagsSelectors: TagsSelectors;
export const rolesSelectors: RolesSelectors;
export const ipRestrictionSelectors: IpRestrictionSelectors;
export const neetoEditorSelectors: NeetoEditorSelectors;
export const neetoFiltersSelectors: NeetoFiltersSelectors;

// exporting all texts

export const commonTexts: CommonTexts;
export const memberTexts: MemberText;
export const memberTableTexts: MemberTableTexts;
export const memberFormErrorTexts: MemberFormErrorTexts;
export const signUpTexts: SignUpTexts;
export const environment: Environment;
export const isStagingEnv: boolean;
export const helpIconTexts: HelpIconTexts;
export const profileTexts: ProfileTexts;
export const rolesTexts: RolesTexts;
export const tagsTexts: TagsTexts;
export const env: Environments;

//exporting fixtures

export const fake: Fake;