/* eslint-disable @typescript-eslint/no-explicit-any */

export type Gender = 'M' | 'F';

export type Platform = 'ios' | 'android';

export type UserAction = 'Accepted' | 'Declined';

export type StatusProps = 'Success' | 'Fail';

export type LoginProps = StatusProps;

export type ErrorHandler = (nameProvider: string, err: Error) => void;

export type LoggerHandler = (nameProvider: string, methodName: string) => void;

export type ProviderMethod = (payload: any) => void;

export type Actor = 'Skip' | 'Customer';

export type ActionMethod = 'Chosen' | 'Added New';

export type BusinessUnit = 'Loja' | 'Loja Fisíca' | 'Clube';

export type Stores = 'Play store' | 'Apple store';

export type Thumbs = 'up' | 'down';

export type DiscountType = 'cash' | 'percent';

export type Change = 'Upgrade' | 'Downgrade';

export type Confirmation = 'Yes' | 'No';

export type MembershipType = 'Free' | 'Premium' | 'Vip' | 'Plus';
export interface EventSdk {
  tryAppReviewed(payload: any, ids: Array<string>): void;
  tryCharged(payload: any, ids: Array<string>): void;
  tryDeepLinkClicked(payload: any, ids: Array<string>): void;
  tryDeepLinkOpened(payload: any, ids: Array<string>): void;
  tryLogin(payload: LoginStatus, ids: Array<string>): void;
  tryLogout(payload: any, ids: Array<string>): void;
  tryOnUserLogin(payload: any, ids: Array<string>): void;
  tryOnUserSelectReasons(payload: any, ids: Array<string>): void;
  trySetUserLocation(payload: any, ids: Array<string>): void;
  tryUpdateFCMtoken(payload: any, ids: Array<string>): void;
  tryUserClicksSignUp(payload: any, ids: Array<string>): void;

  tryVisitsHomePage(payload: any, ids: Array<string>): void;
  tryVisitsJoinPage(payload: any, ids: Array<string>): void;
  tryVisitsPremiumPage(payload: any, ids: Array<string>): void;
  tryVisitsFreePage(payload: any, ids: Array<string>): void;
  tryVisitsOnboarding(payload: any, ids: Array<string>): void;
  tryVisitsDashboard(payload: any, ids: Array<string>): void;
  tryVisitsBusinessProfile(payload: any, ids: Array<string>): void;
  tryVisitsRemindersPage(payload: any, ids: Array<string>): void;
  tryUserCompletesBusinessProfile(payload: any, ids: Array<string>): void;
  tryUserClickTodoItem(payload: any, ids: Array<string>): void;

  tryUserConfirmsSubscription(payload: any, ids: Array<string>): void;
  tryUserScheduledOnboardingCall(payload: any, ids: Array<string>): void;
  tryUserFeaturedBusinessOnSkip(payload: any, ids: Array<string>): void;

  tryAccountCreated(payload: any, ids: Array<string>): void;
  tryAccountCreatedError(payload: any, ids: Array<string>): void;

  tryClickedAnnual(payload: any, ids: Array<string>): void;
  tryClickedAutoSubCheckbox(payload: any, ids: Array<string>): void;
  tryClickedCardNumberField(payload: any, ids: Array<string>): void;
  tryClickedCheckAvailability(payload: any, ids: Array<string>): void;
  tryClickedConfirm(payload: any, ids: Array<string>): void;
  tryClickedContinuetoDashboard(payload: any, ids: Array<string>): void;
  tryClickedDownloadApp(payload: any, ids: Array<string>): void;
  tryClickedFunding(payload: any, ids: Array<string>): void;
  tryClickedLogin(payload: any, ids: Array<string>): void;
  tryClickedMonthly(payload: any, ids: Array<string>): void;
  tryClickedPrivacyPolicy(payload: any, ids: Array<string>): void;
  tryClickedReferralEmailField(payload: any, ids: Array<string>): void;
  tryClickedReviewReadMore(payload: any, ids: Array<string>): void;
  tryClickedSaveNewPassword(payload: any, ids: Array<string>): void;
  tryClickedSendInvites(payload: any, ids: Array<string>): void;
  tryClickedTermsandConditions(payload: any, ids: Array<string>): void;

  tryPaymentVerifiedError(payload: any, ids: Array<string>): void;
  tryPaymentVerifiedSuccess(payload: any, ids: Array<string>): void;
  trySaveNewPasswordError(payload: any, ids: Array<string>): void;

  tryViewedCalendlyCalendar(payload: any, ids: Array<string>): void;
  tryViewedNewPasswordPage(payload: any, ids: Array<string>): void;
  tryViewedPaymentInfo(payload: any, ids: Array<string>): void;
  tryViewedPlusPage(payload: any, ids: Array<string>): void;
  tryViewedPremiumConciergePage(payload: any, ids: Array<string>): void;
  tryViewedPlatinumConciergePage(payload: any, ids: Array<string>): void;

  // plop EventSdk

  tryAddedLoanApplicationTracking(payload: any, ids: Array<string>): void;

  tryClickedServiceFlow(payload: any, ids: Array<string>): void;

  tryUpgradedFromAccountDetails(payload: any, ids: Array<string>): void;

  tryUpgradedFromLatestFundingOpportunity(payload: any, ids: Array<string>): void;

  tryAddedFundingGoal(payload: any, ids: Array<string>): void;

  tryClickOnBlog(payload: any, ids: Array<string>): void;

  tryNotInterestedInFundingOpportunity(payload: any, ids: Array<string>): void;

  trySharedReferralLink(payload: any, ids: Array<string>): void;

  tryExitedAddBusinessModal(payload: any, ids: Array<string>): void;

  tryAddedBusiness(payload: any, ids: Array<string>): void;

  tryInvitesAFriend(payload: any, ids: Array<string>): void;
}

export interface Provider {
  appReviewed?: ProviderMethod;
  charged?: ProviderMethod;
  deepLinkClicked?: ProviderMethod;
  deepLinkOpened?: ProviderMethod;
  login?: ProviderMethod;
  logout?: ProviderMethod;
  onUserLogin?: ProviderMethod;
  onUserSelectReasons?: ProviderMethod;
  setUserLocation?: ProviderMethod;
  updateFCMtoken?: ProviderMethod;

  visitsHomePage?: ProviderMethod;
  visitsJoinPage?: ProviderMethod;
  visitsPremiumPage?: ProviderMethod;
  visitsFreePage?: ProviderMethod;
  visitsOnboarding?: ProviderMethod;
  visitsDashboard?: ProviderMethod;
  visitsBusinessProfile?: ProviderMethod;
  visitsRemindersPage?: ProviderMethod;

  userClicksSignUp: ProviderMethod;
  userCompletesBusinessProfile: ProviderMethod;
  userClickTodoItem: ProviderMethod;
  userConfirmsSubscription: ProviderMethod;
  userScheduledOnboardingCall: ProviderMethod;
  userFeaturedBusinessOnSkip: ProviderMethod;

  accountCreated: ProviderMethod;
  accountCreatedError: ProviderMethod;

  clickedAnnual: ProviderMethod;
  clickedAutoSubCheckbox: ProviderMethod;
  clickedCardNumberField: ProviderMethod;
  clickedCheckAvailability: ProviderMethod;
  clickedConfirm: ProviderMethod;
  clickedContinuetoDashboard: ProviderMethod;
  clickedDownloadApp: ProviderMethod;
  clickedFunding: ProviderMethod;
  clickedLogin: ProviderMethod;
  clickedMonthly: ProviderMethod;
  clickedPrivacyPolicy: ProviderMethod;
  clickedReferralEmailField: ProviderMethod;
  clickedReviewReadMore: ProviderMethod;
  clickedSaveNewPassword: ProviderMethod;
  clickedSendInvites: ProviderMethod;
  clickedTermsandConditions: ProviderMethod;

  paymentVerifiedError: ProviderMethod;
  paymentVerifiedSuccess: ProviderMethod;
  saveNewPasswordError: ProviderMethod;

  viewedCalendlyCalendar: ProviderMethod;
  viewedNewPasswordPage: ProviderMethod;
  viewedPaymentInfo: ProviderMethod;
  viewedPlusPage: ProviderMethod;
  viewedPremiumConciergePage: ProviderMethod;
  viewedPlatinumConciergePage: ProviderMethod;

  // plop provider

  addedLoanApplicationTracking: ProviderMethod;

  clickedServiceFlow: ProviderMethod;

  upgradedFromAccountDetails: ProviderMethod;

  upgradedFromLatestFundingOpportunity: ProviderMethod;

  addedFundingGoal: ProviderMethod;

  clickOnBlog: ProviderMethod;

  notInterestedInFundingOpportunity: ProviderMethod;

  sharedReferralLink: ProviderMethod;

  exitedAddBusinessModal: ProviderMethod;

  addedBusiness: ProviderMethod;

  invitesAFriend: ProviderMethod;
}

export type ProviderAttr = keyof Provider;

interface DeviceType {
  channel?: string;
}

export interface Action extends DeviceType {
  action?: string;
}

export interface DeepLink extends DeviceType {
  url: string;
  success: boolean;
}

export interface Location extends DeviceType {
  latitude: number;
  longitude?: number;
}

export interface LoginStatus extends DeviceType {
  status: StatusProps;
}

export interface Product extends DeviceType {
  title?: string;
  description: string;
  sku?: string;
}

export interface Order extends DeviceType {
  business_unit?: BusinessUnit;
  cart_id?: number;
  order_id?: number;
  // THIS NAME IS CLEVERTAP MANDATORY. DON'T REMOVE OR CHANGE THIS
  Items?: Product[];
}

export interface UserProfile extends DeviceType {
  Uid?: string;
  Identity?: string;
  Name?: string;
  Last_name?: string;
  Email?: string;
  UserEmail?: string;
  Phone?: string;
  DOB?: Date;
  Gender?: Gender;
  Photo?: string;
  Email_Verified?: boolean;
  Onboarding_Reasons?: string[];
  Onboarding_Reasons_Id?: string[];
  Membership_Type?: MembershipType;
}

export interface AppReview extends DeviceType {
  store: Stores;
  thumbs: Thumbs;
  body?: string;
}

export interface PageVisited {
  Current_Page?: string;
}

export interface TodoItemType {
  TodoType?: string;
}

export interface UserConfirmsSubscription {
  Selected_Plan?: string;
  Current_Page?: string;
}
