import { BaseSearchParameters, Faction, Factions, Href, KeyBase, Locales, NameId, NameIdKey, NullishNameIdKey, Resource, ResponseBase, SearchResponseWithoutResults } from "@blizzard-api/core";

//#region src/journal/types.d.ts
/**
 * The response for a journal encounter index.
 * @see {@link https://develop.battle.net/documentation/world-of-warcraft/game-data-apis}
 */
interface JournalEncounterIndexResponse extends ResponseBase {
  encounters: Array<NullishNameIdKey>;
}
/**
 * The response for a journal encounter.
 * @see {@link https://develop.battle.net/documentation/world-of-warcraft/game-data-apis}
 */
interface JournalEncounterResponse extends NameId, ResponseBase {
  category: Category;
  creatures?: Array<Creature>;
  description?: string;
  faction?: Faction;
  instance: KeyBase & {
    id: number;
    name?: string;
  };
  items?: Array<Item>;
  modes?: Array<Mode>;
  sections?: Array<JournalSection>;
}
/**
 * The parameters for a journal encounter search.
 * @see {@link https://develop.battle.net/documentation/world-of-warcraft/game-data-apis}
 * @see {@link https://develop.battle.net/documentation/world-of-warcraft/guides/search}
 */
interface JournalEncounterSearchParameters extends BaseSearchParameters {
  instanceName: string;
  locale: Locales;
}
/**
 * The response for a journal encounter search.
 * @see {@link https://develop.battle.net/documentation/world-of-warcraft/game-data-apis}
 * @see {@link https://develop.battle.net/documentation/world-of-warcraft/guides/search}
 */
interface JournalEncounterSearchResponse extends SearchResponseWithoutResults {
  results: Array<JournalEncounterSearchResponseItem>;
}
/**
 * The response for a journal expansion index.
 * @see {@link https://develop.battle.net/documentation/world-of-warcraft/game-data-apis}
 */
interface JournalExpansionIndexResponse extends ResponseBase {
  tiers: Array<NameIdKey>;
}
/**
 * The response for a journal expansion.
 * @see {@link https://develop.battle.net/documentation/world-of-warcraft/game-data-apis}
 */
interface JournalExpansionResponse extends NameId, ResponseBase {
  dungeons: Array<NameIdKey>;
  raids: Array<NameIdKey>;
  world_bosses?: Array<NameIdKey>;
}
/**
 * The response for a journal instance index.
 * @see {@link https://develop.battle.net/documentation/world-of-warcraft/game-data-apis}
 */
interface JournalInstanceIndexResponse extends ResponseBase {
  instances: Array<NameIdKey>;
}
/**
 * The response for journal instance media.
 * @see {@link https://develop.battle.net/documentation/world-of-warcraft/game-data-apis}
 */
interface JournalInstanceMediaResponse extends ResponseBase {
  assets: Array<Asset>;
}
/**
 * The response for a journal instance.
 * @see {@link https://develop.battle.net/documentation/world-of-warcraft/game-data-apis}
 */
interface JournalInstanceResponse extends NameId, ResponseBase {
  area?: NameId;
  category: Category;
  description?: string;
  encounters: Array<NameIdKey>;
  expansion?: NameIdKey;
  location?: NameId;
  map?: NameId;
  media: Media;
  minimum_level?: number;
  modes?: Array<ModeElement>;
  order_index?: number;
}
interface Asset {
  key: string;
  value: string;
}
interface Category {
  type?: EncounterCategory;
}
interface Creature extends NameId {
  creature_display: CreatureDisplay;
  description?: string;
}
interface CreatureDisplay {
  id: number;
  key?: Href;
}
type EncounterCategory = 'DUNGEON' | 'EVENT' | 'RAID' | 'WORLD_BOSS';
type EncounterMode = 'HEROIC' | 'LFR' | 'MYTHIC' | 'MYTHIC_KEYSTONE' | 'NORMAL';
interface Item {
  id: number;
  item: NameIdKey;
}
interface JournalEncounterSearchCreature {
  creature_display: {
    id: number;
  };
  id: number;
  name: Record<Locales, string>;
}
interface JournalEncounterSearchItem {
  id: number;
  item: {
    id: number;
    name: Record<Locales, string>;
  };
}
interface JournalEncounterSearchResponseItem extends KeyBase {
  data: {
    category: Category;
    creatures: Array<JournalEncounterSearchCreature>;
    faction?: {
      name: Record<Locales, string>;
      type: Factions;
    };
    id: number;
    instance: {
      id: number;
      name?: Record<Locales, string>;
    };
    items?: Array<JournalEncounterSearchItem>;
    modes?: Array<{
      name: Record<Locales, string>;
      type: EncounterMode;
    }>;
    name: Record<Locales, string>;
    sections?: Array<JournalSectionSearch>;
  };
}
interface JournalSection {
  body_text?: null | string;
  creature_display?: CreatureDisplay;
  id: number;
  sections?: Array<JournalSubSection>;
  spell?: KeyBase & {
    id: number;
    name?: string;
  };
  title?: null | string;
}
interface JournalSectionSearch {
  body_text?: null | string;
  creature_display?: CreatureDisplay;
  id: number;
  sections?: Array<JournalSubSectionSearch>;
  spell?: KeyBase & {
    id: number;
    name?: string;
  };
  title?: Record<Locales, string>;
}
interface JournalSubSection {
  body_text?: null | string;
  creature_display?: CreatureDisplay;
  id: number;
  sections?: Array<JournalSubSection2>;
  spell?: KeyBase & {
    id: number;
    name?: string;
  };
  title?: string;
}
interface JournalSubSection2 {
  body_text?: null | string;
  creature_display?: CreatureDisplay;
  id: number;
  sections?: Array<JournalSubSection3>;
  spell?: KeyBase & {
    id: number;
    name?: string;
  };
  title?: string;
}
interface JournalSubSection3 {
  body_text?: null | string;
  creature_display?: CreatureDisplay;
  id: number;
  sections?: Array<JournalSubSection4>;
  spell?: KeyBase & {
    id: number;
    name?: string;
  };
  title?: string;
}
interface JournalSubSection4 {
  body_text?: null | string;
  creature_display?: CreatureDisplay;
  id: number;
  sections?: Array<JournalSubSection5>;
  spell?: KeyBase & {
    id: number;
    name?: string;
  };
  title?: string;
}
interface JournalSubSection5 {
  body_text?: null | string;
  creature_display?: CreatureDisplay;
  id: number;
  sections?: Array<JournalSubSection6>;
  spell?: KeyBase & {
    id: number;
    name?: string;
  };
  title?: string;
}
interface JournalSubSection6 {
  body_text?: null | string;
  creature_display?: CreatureDisplay;
  id: number;
  spell?: KeyBase & {
    id: number;
    name?: string;
  };
  title?: string;
}
interface JournalSubSectionSearch {
  body_text?: null | string;
  creature_display?: CreatureDisplay;
  id: number;
  sections?: Array<JournalSubSectionSearch2>;
  spell?: KeyBase & {
    id: number;
    name?: string;
  };
  title?: Record<Locales, string>;
}
interface JournalSubSectionSearch2 {
  body_text?: null | string;
  creature_display?: CreatureDisplay;
  id: number;
  sections?: Array<JournalSubSectionSearch3>;
  spell?: KeyBase & {
    id: number;
    name?: string;
  };
  title?: Record<Locales, string>;
}
interface JournalSubSectionSearch3 {
  body_text?: null | string;
  creature_display?: CreatureDisplay;
  id: number;
  sections?: Array<JournalSubSectionSearch4>;
  spell?: KeyBase & {
    id: number;
    name?: string;
  };
  title?: Record<Locales, string>;
}
interface JournalSubSectionSearch4 {
  body_text?: null | string;
  creature_display?: CreatureDisplay;
  id: number;
  sections?: Array<JournalSubSectionSearch5>;
  spell?: KeyBase & {
    id: number;
    name?: string;
  };
  title?: Record<Locales, string>;
}
interface JournalSubSectionSearch5 {
  body_text?: null | string;
  creature_display?: CreatureDisplay;
  id: number;
  sections?: Array<JournalSubSectionSearch6>;
  spell?: KeyBase & {
    id: number;
    name?: string;
  };
  title?: Record<Locales, string>;
}
interface JournalSubSectionSearch6 {
  body_text?: null | string;
  creature_display?: CreatureDisplay;
  id: number;
  spell?: KeyBase & {
    id: number;
    name?: string;
  };
  title?: string;
}
interface Media extends KeyBase {
  id: number;
}
interface Mode {
  name: string;
  type: ModeType;
}
interface ModeElement {
  is_timewalking?: boolean;
  is_tracked: boolean;
  mode: Mode;
  players: number;
}
type ModeType = 'HEROIC' | 'LEGACY_10_MAN' | 'LEGACY_10_MAN_HEROIC' | 'LEGACY_25_MAN' | 'LEGACY_25_MAN_HEROIC' | 'LFR' | 'MYTHIC' | 'MYTHIC_KEYSTONE' | 'NORMAL';
//#endregion
//#region src/journal/index.d.ts
/**
 * Get a journal encounter by ID.
 * @param journalEncounterId The journal encounter ID.
 * @returns The journal encounter. See {@link JournalEncounterResponse}.
 */
declare function journalEncounter(journalEncounterId: number): Resource<JournalEncounterResponse>;
/**
 * Get the journal encounter index.
 * @returns The journal encounter index. See {@link JournalEncounterIndexResponse}.
 */
declare function journalEncounterIndex(): Resource<JournalEncounterIndexResponse>;
/**
 * Search for journal encounters.
 * @param options The search parameters. See {@link JournalEncounterSearchParameters}.
 * @returns The search results. See {@link JournalEncounterSearchResponse}.
 */
declare function journalEncounterSearch(options: JournalEncounterSearchParameters): Resource<JournalEncounterSearchResponse, Omit<JournalEncounterSearchParameters, 'instanceName' | 'locale'>>;
/**
 * Get a journal expansion by ID.
 * @param journalExpansionId The journal expansion ID.
 * @returns The journal expansion. See {@link JournalExpansionResponse}.
 */
declare function journalExpansion(journalExpansionId: number): Resource<JournalExpansionResponse>;
/**
 * Get the journal expansion index.
 * @returns The journal expansion index. See {@link JournalExpansionIndexResponse}.
 */
declare function journalExpansionIndex(): Resource<JournalExpansionIndexResponse>;
/**
 * Get a journal instance by ID.
 * @param journalInstanceId The journal instance ID.
 * @returns The journal instance. See {@link JournalInstanceResponse}.
 */
declare function journalInstance(journalInstanceId: number): Resource<JournalInstanceResponse>;
/**
 * Get the journal instance index.
 * @returns The journal instance index. See {@link JournalInstanceIndexResponse}.
 */
declare function journalInstanceIndex(): Resource<JournalInstanceIndexResponse>;
/**
 * Get journal instance media by ID.
 * @param journalInstanceId The journal instance ID.
 * @returns The journal instance media. See {@link JournalInstanceMediaResponse}.
 */
declare function journalInstanceMedia(journalInstanceId: number): Resource<JournalInstanceMediaResponse>;
//#endregion
export { JournalInstanceResponse as _, journalExpansionIndex as a, journalInstanceMedia as c, JournalEncounterSearchParameters as d, JournalEncounterSearchResponse as f, JournalInstanceMediaResponse as g, JournalInstanceIndexResponse as h, journalExpansion as i, JournalEncounterIndexResponse as l, JournalExpansionResponse as m, journalEncounterIndex as n, journalInstance as o, JournalExpansionIndexResponse as p, journalEncounterSearch as r, journalInstanceIndex as s, journalEncounter as t, JournalEncounterResponse as u };
//# sourceMappingURL=index-0KWdApHb.d.ts.map