/**
 * Flowtype definitions for NyxApi
 * Generated by Flowgen from a Typescript Definition
 * Flowgen v1.14.1
 */

import { Http } from "./Http";
import {
  Auth,
  BookmarksResponse,
  Context,
  DiscussionResponse,
  DiscussionStatsResponse,
  HistoryResponse,
  LastDiscussionsResponse,
  LastPostsResponse,
  MailResponse,
  NotificationsResponse,
  NyxInit,
  OnPostUpdatedResponse,
  Post,
  RatingsResponse,
  RemindersResponse,
  Response as NyxResponse,
  SearchResponse,
  UploadFileResponse,
  WaitingFilesResponse,
} from "./model";
declare export class NyxApi mixins Http {
  constructor(data: NyxInit): this;

  /**
   * @throws Error
   */
  createAuthToken(username: string): Promise<Auth>;
  logout(): Promise<void>;
  deleteAuthToken(): Promise<$Rest<NyxResponse, { ... }>>;
  getBookmarks(
    includingSeen?: boolean
  ): Promise<$Rest<BookmarksResponse, { ... }>>;
  getHistory(
    showRead?: boolean,
    showBooked?: boolean
  ): Promise<$Rest<HistoryResponse, { ... }>>;
  getContext(): Promise<$Rest<Context, { ... }>>;
  getLastPosts(
    minRating?: number,
    isRatedByFriends?: boolean,
    isRatedByMe?: boolean
  ): Promise<$Rest<LastPostsResponse, { ... }>>;
  getLastDiscussions(): Promise<$Rest<LastDiscussionsResponse, { ... }>>;
  search(
    phrase: string,
    isUnified?: boolean,
    isUsername?: boolean,
    limit?: number
  ): Promise<$Rest<SearchResponse, { ... }>>;
  getDiscussion(
    id: string | number
  ): Promise<$Rest<DiscussionResponse, { ... }>>;
  getDiscussionBoard(
    id: string | number
  ): Promise<$Rest<DiscussionResponse, { ... }>>;
  getDiscussionStats(
    id: string | number
  ): Promise<$Rest<DiscussionStatsResponse, { ... }>>;
  getMail(queryString?: string): Promise<$Rest<MailResponse, { ... }>>;
  getReminders(
    type: "bookmarks" | "mail"
  ): Promise<$Rest<RemindersResponse, { ... }>>;
  getWaitingFiles(
    discussionId: string | number
  ): Promise<$Rest<WaitingFilesResponse, { ... }>>;
  getNotifications(): Promise<$Rest<NotificationsResponse, { ... }>>;
  getRating(post: Post): Promise<$Rest<RatingsResponse, { ... }>>;
  ratePost(
    post: Post,
    rating: "positive" | "negative" | "negative_visible" | "remove"
  ): Promise<$Rest<OnPostUpdatedResponse, { ... }>>;
  setReminder(
    discussionId: string | number,
    postId: string | number,
    isReminder: boolean
  ): Promise<$Rest<OnPostUpdatedResponse, { ... }>>;
  reportPost(postId: string | number): Promise<$Rest<NyxResponse, { ... }>>;
  sendPrivateMessage(
    recipient: string,
    message: string
  ): Promise<$Rest<NyxResponse, { ... }>>;
  sendTypingNotification(
    recipient: string
  ): Promise<$Rest<NyxResponse, { ... }>>;
  bookmarkDiscussion(
    discussionId: string | number,
    isBooked: boolean,
    categoryId?: number
  ): Promise<$Rest<NyxResponse, { ... }>>;
  rollDice(
    discussionId: string | number,
    postId: string | number
  ): Promise<$Rest<OnPostUpdatedResponse, { ... }>>;
  rollDiceInHeader(
    discussionId: string | number,
    contentId: string | number
  ): Promise<$Rest<OnPostUpdatedResponse, { ... }>>;
  voteInPoll(
    discussionId: string | number,
    postId: string | number,
    answers: string[]
  ): Promise<$Rest<OnPostUpdatedResponse, { ... }>>;
  voteInHeaderPoll(
    discussionId: string | number,
    contentId: string | number,
    answers: string[]
  ): Promise<$Rest<OnPostUpdatedResponse, { ... }>>;
  postToDiscussion(
    discussionId: string | number,
    text: string
  ): Promise<$Rest<NyxResponse, { ... }>>;
  deletePost(
    discussionId: string | number,
    postId: string | number
  ): Promise<$Rest<NyxResponse, { ... }>>;
  uploadFile(
    file: File | any,
    discussionId?: string | number
  ): Promise<$Rest<UploadFileResponse, { ... }>>;
  deleteFile(fileId: string | number): Promise<$Rest<NyxResponse, { ... }>>;
  subscribeForFCM(
    fcmToken: string,
    appIdentifier: string
  ): Promise<$Rest<NyxResponse, { ... }>>;
  unregisterFromFCM(
    fcmToken: string,
    appIdentifier: string
  ): Promise<$Rest<NyxResponse, { ... }>>;
}
