// @ts-nocheck
import { Observable } from "rxjs";
import { ContactListScopeForOrganizationUsers } from "../../utils/enums";
import { GetContactListResponse } from "../data/contact-utils.data.model";
import { SelectedUserContact } from "../data/user-contact.data.model";

export declare class ContactElement {
  /**
   * Get if user is part of global contact or not.
   */
  public isUserGlobalContact: () => Observable<boolean>;

  /**
   * Get selected contact details.
   */
  public onContactSelected: () => Observable<SelectedUserContact | null>;

  /**
   * Enable @here for contact list.
   */
  public enableAtHere: () => void;

  /**
   * Set @here label.
   */
  public setAtHereLabel: (label: string) => void;

  /**
   * Set @here description.
   */
  public setAtHereDescription: (description: string) => void;

  /**
   * Disable @here for contact list.
   */
  public disableAtHere: () => void;

  /**
   * Update contact list scope for organization users.
   * @param scope ContactListScopeForOrganizationUsers[]
   */
  public updateContactListScopeForOrganizationUsers: (scope: ContactListScopeForOrganizationUsers[]) => void;

  /**
   * Update contact list.
   * @param userContacts UserContact[]
   * @param config {merge: boolean}
   */
  public updateContactList: (userContacts: UserContact[], config?: { merge: boolean }) => void;

  /**
   * Get contact list.
   */
  public getContactList: () => Observable<GetContactListResponse | null>;
  constructor();
  /**
   * Get if user is part of global contact or not.
   */
  private _isUserGlobalContact;

  /**
   * Get selected contact details.
   */
  private _onContactSelected;

  /**
   * Enable @here for contact list.
   */
  private _enableAtHere;

  /**
   * Enable @here label.
   */
  private _setAtHereLabel;

  /**
   * Enable @here description.
   */
  private _setAtHereDescription;

  /**
   * Disable @here for contact list.
   */
  private _disableAtHere;

  /**
   * Update contact list scope for organization users.
   * @param scope ContactListScopeForOrganizationUsers[]
   */
  private _updateContactListScopeForOrganizationUsers;

  /**
   * Update contact list.
   * @param userContacts UserContact[]
   * @param config {merge: boolean}
   */
  private _updateContactList;

  /**
   * Get contact list.
   */
  private _getContactList;
}
