import { ChangeOrganisationDomainRequest } from './dto/ChangeOrganisationDomain';
import { CloneOrganisationRequest } from './dto/CloneOrganisation';
import { ImportMemberRequest } from './dto/ImportMemberRequest';
import { RemoveOrganisationAdminRequest } from './dto/RemoveOrganisationAdminRequest';
import { Config, FormModel, GetInvitation, Group, Invitation, MeetingGoalConfig, MentornityViewConfigViewName, Mentorship, Organisation, User, ViewConfigWrapper } from './models';
import { ExportOrganisationRequest } from './dto/ExportOrganisation';
import { ImportOrganisationRequest } from './dto/ImportOrganisation';
export interface ListResponse<T> {
  results: Array<T>;
  meta: {
    count: number;
    skipped: number;
    total: number;
  };
}
export declare type PlatformAuthTypes = 'microsoftAuthUrl' | 'zoomAuthUrl' | 'googleAuthUrl' | 'microsoftBusinessAuthUrl';
export interface BodyForCreateAnouncement {
  content: string;
  title: string;
  target: string;
  status: 'published' | 'unpublished';
  sendEmail: boolean;
}
export interface CreateItemResponse {
  _id: string;
  createdAt: number;
  updatedAt: number;
}
export declare class MentornityApi {
  private api;
  constructor(endpoint: string, defaultHeaders?: object);
  create: (collection: string, body: object) => Promise<unknown>;
  find: (collection: string, params?: object) => Promise<unknown>;
  get: <T>(collection: string, id: string, params?: object) => Promise<T>;
  update: (collection: string, id: string, body: object) => Promise<unknown>;
  delete: (collection: string, id: string) => Promise<unknown>;
  login: (email: any, password: any, client: any) => Promise<unknown>;
  saveConsentForPolicy: (userId: any, policyId: any, page: any) => Promise<unknown>;
  getPrivacyPolicy: (language: any) => Promise<unknown>;
  getPlatformOAuthURL: (platformType: PlatformAuthTypes) => Promise<unknown>;
  /**
   * Removes the connected OAuth platform account from the user.
   *
   * @param userId of the account.
   * @param platform that owns the OAuth API.
   */
  removeOAuth: (userId: string, platform: 'microsoft' | 'google' | 'zoom' | 'microsoftbusiness') => Promise<unknown>;
  /**
   * Used to gets session data. Returns only white label info if there is no account.
   *
   * @param domain of the current web site. (used to determine the white label)
   */
  getSessionData: (domain: string) => Promise<any>;
  getOrganisation: (organisationId: string) => Promise<Organisation>;
  getOrganisationWithDomain: (domain: any) => Promise<Organisation>;
  getOrganisationConfig: (organisationId: string) => Promise<Config>;
  getOrganisationMeetingGoalConfig: (organisationId: string) => Promise<MeetingGoalConfig>;
  getViewConfigs: (organisationId: string) => Promise<ListResponse<ViewConfigWrapper>>;
  getViewConfig: (organisationId: string, viewName: MentornityViewConfigViewName) => Promise<ViewConfigWrapper>;
  createViewConfig: (viewConfigWrapper: Partial<ViewConfigWrapper>) => Promise<CreateItemResponse>;
  updateViewConfig: (id: string, viewConfigWrapper: Partial<ViewConfigWrapper>) => Promise<CreateItemResponse>;
  createInvitation: (data: Invitation) => Promise<CreateItemResponse>;
  getInvitation: (id: string) => Promise<GetInvitation>;
  acceptInvitation: (invitationId: any, password: any) => Promise<unknown>;
  getMentees: (organisationId: string, query?: {}, skip?: number, sort?: string, limit?: number) => Promise<ListResponse<User>>;
  getMentors: (organisationId: string, query?: {}, skip?: number, sort?: string, limit?: number) => Promise<ListResponse<User>>;
  getGroups: (id: any, skip?: number, limit?: number, title?: string, expandCreatedBy?: boolean) => Promise<ListResponse<User>>;
  getGroup: (id: any) => Promise<Group>;
  getMentorshipOfUser: (organisationId: string, userId: string) => Promise<Mentorship>;
  getMembershipApplicationForm: (organisationId: string, role: 'mentors' | 'mentees') => Promise<FormModel>;
  createMembershipApplication: (organisationId: string, role: string, data: any) => Promise<CreateItemResponse>;
  getMetadataOfUser: (organisationId: string, role: string, userId: string) => Promise<ListResponse<User>>;
  getOrganisations: (query?: {}, skip?: number, sort?: string, limit?: number) => Promise<ListResponse<Organisation>>;
  createSubscription: (subscription: any) => Promise<CreateItemResponse>;
  followUnfollowSubscription: (subscriptionId: any, action: any) => Promise<unknown>;
  getSubscriptionsOfMentors: (id: string, query?: {}, skip?: number, sort?: string, limit?: number) => Promise<ListResponse<User>>;
  completeSubscription: (subscriptionId: string) => Promise<unknown>;
  deleteSubscription: (subscriptionId: string) => Promise<unknown>;
  getMeetings: (organisationId: string, memberRolePath: 'mentors' | 'mentees', userId: string, query?: {}, skip?: number, sort?: string, limit?: number) => Promise<ListResponse<Event>>;
  getUsersMeetingsChronologically: (accountId: any, organisationId: any, skip: any) => Promise<unknown>;
  getGroupsMeetingsChronologically: (groupId: any, skip: any) => Promise<unknown>;
  getMeetingsInMeetingGoal: (id: string, query?: {}, skip?: number, sort?: string, limit?: number) => Promise<ListResponse<Event>>;
  getUsersWithMeetingsInMeetingGoal: (id: string, userType: string, query?: any, skip?: number, sort?: string, limit?: number) => Promise<ListResponse<Event>>;
  getCalendarBundleList: (domain: string, startDate: number, endDate: number) => Promise<ListResponse<any>>;
  createAnouncement: (body: BodyForCreateAnouncement) => Promise<unknown>;
  updateAnouncement: (id: string, body: any) => Promise<unknown>;
  deleteAnouncement: (id: string) => Promise<unknown>;
  getAnnouncements: (id: string, role?: string, skip?: number, limit?: number) => Promise<unknown>;
  getAnnouncement: (announcementId: string) => Promise<unknown>;
  getAnnouncemntReport: (announcementId: string) => Promise<unknown>;
  sendEmailsForAnnouncement: (announcementId: string, targetList: {
    userId: string;
  }[], target: any) => Promise<unknown>;
  cloneOrganisation(body: CloneOrganisationRequest): Promise<unknown>;
  exportOrganisation(body: ExportOrganisationRequest): Promise<unknown>;
  importOrganisation(body: ImportOrganisationRequest): Promise<unknown>;
  importUser(id: string, userType: 'admins' | 'mentees' | 'mentors', body: ImportMemberRequest): Promise<CreateItemResponse>;
  removeOrganisationAdmin(userId: string, body: RemoveOrganisationAdminRequest): Promise<unknown>;
  eraseUser(userId: string): Promise<unknown>;
  changeOrganisationDomain({ domain, organisationId }: ChangeOrganisationDomainRequest): Promise<unknown>;
  createForm: (data: FormModel) => Promise<CreateItemResponse>;
  createFormResponse: (data: any) => Promise<unknown>;
  createWhiteLabel: (data: any) => Promise<CreateItemResponse>;
  updateWhiteLabel: (id: string, data: any) => Promise<CreateItemResponse>;
  deleteWhiteLabel: (id: string) => Promise<unknown>;
  getWhiteLabel: (organisationId: string) => Promise<unknown>;
  addAuthInterceptor: (token: string, sessionToken: string) => void;
}
