/**
 * Bungie.Net API
 * These endpoints constitute the functionality exposed by Bungie.net, both for more traditional website functionality and for connectivity to Bungie video games and their related functionality.
 *
 * OpenAPI spec version: 2.1.5
 * Contact: support@bungie.com
 *
 * NOTE: This class is auto generated by the bungie-api-ts code generator program.
 * https://github.com/DestinyItemManager/bugie-api-ts
 * Do not edit these files manually.
 */

import {
  GeneralUser
} from '../user/interfaces';
import {
  GroupResponse
} from '../groupv2/interfaces';
import {
  IgnoreResponse,
  TagResponse
} from '../platform';
import {
  PagedQuery
} from '../common';

export const enum ForumTopicsCategoryFiltersEnum {
  None = 0,
  Links = 1,
  Questions = 2,
  AnsweredQuestions = 4,
  Media = 8,
  TextOnly = 16,
  Announcement = 32,
  BungieOfficial = 64,
  Polls = 128
}

export const enum ForumTopicsQuickDateEnum {
  All = 0,
  LastYear = 1,
  LastMonth = 2,
  LastWeek = 3,
  LastDay = 4
}

export const enum ForumTopicsSortEnum {
  Default = 0,
  LastReplied = 1,
  MostReplied = 2,
  Popularity = 3,
  Controversiality = 4,
  Liked = 5,
  HighestRated = 6,
  MostUpvoted = 7
}

export const enum ForumPostSortEnum {
  Default = 0,
  OldestFirst = 1
}

export interface PostSearchResponse {
  readonly relatedPosts: PostResponse[];
  readonly authors: GeneralUser[];
  readonly groups: GroupResponse[];
  readonly searchedTags: TagResponse[];
  readonly polls: PollResponse[];
  readonly recruitmentDetails: ForumRecruitmentDetail[];
  readonly availablePages?: number;
  readonly results: PostResponse[];
  readonly totalResults: number;
  readonly hasMore: boolean;
  readonly query: PagedQuery;
  readonly replacementContinuationToken: string;
  /**
   * If useTotalResults is true, then totalResults represents an accurate count.
   *
   * If False, it does not, and may be estimated/only the size of the current page.
   *
   * Either way, you should probably always only trust hasMore.
   *
   * This is a long-held historical throwback to when we used to do paging with known
   * total results. Those queries toasted our database, and we were left to hastily
   * alter our endpoints and create backward- compatible shims, of which
   * useTotalResults is one.
   */
  readonly useTotalResults: boolean;
}

export interface PostResponse {
  readonly lastReplyTimestamp: string;
  readonly IsPinned: boolean;
  readonly urlMediaType: ForumMediaType;
  readonly thumbnail: string;
  readonly popularity: ForumPostPopularity;
  readonly isActive: boolean;
  readonly isAnnouncement: boolean;
  readonly userRating: number;
  readonly userHasRated: boolean;
  readonly userHasMutedPost: boolean;
  readonly latestReplyPostId: string;
  readonly latestReplyAuthorId: string;
  readonly ignoreStatus: IgnoreResponse;
  readonly locale: string;
}

export const enum ForumMediaType {
  None = 0,
  Image = 1,
  Video = 2,
  Youtube = 3
}

export const enum ForumPostPopularity {
  Empty = 0,
  Default = 1,
  Discussed = 2,
  CoolStory = 3,
  HeatingUp = 4,
  Hot = 5
}

export interface PollResponse {
  readonly topicId: string;
  readonly results: PollResult[];
  readonly totalVotes: number;
}

export interface PollResult {
  readonly answerText: string;
  readonly answerSlot: number;
  readonly lastVoteDate: string;
  readonly votes: number;
  readonly requestingUserVoted: boolean;
}

export interface ForumRecruitmentDetail {
  readonly topicId: string;
  readonly microphoneRequired: boolean;
  readonly intensity: ForumRecruitmentIntensityLabel;
  readonly tone: ForumRecruitmentToneLabel;
  readonly approved: boolean;
  readonly conversationId?: string;
  readonly playerSlotsTotal: number;
  readonly playerSlotsRemaining: number;
  readonly Fireteam: GeneralUser[];
  readonly kickedPlayerIds: string[];
}

export const enum ForumRecruitmentIntensityLabel {
  None = 0,
  Casual = 1,
  Professional = 2
}

export const enum ForumRecruitmentToneLabel {
  None = 0,
  FamilyFriendly = 1,
  Rowdy = 2
}

export interface SaveMessageResult {
  readonly conversationId: string;
  readonly messageId: string;
}

export const enum CommunityContentSortMode {
  Trending = 0,
  Latest = 1,
  HighestRated = 2
}
