import { Locales, Resource } from "@blizzard-api/core";

//#region src/base.d.ts
type GameMode$1 = 'arena' | 'battlegrounds' | 'classic' | 'constructed' | 'duels' | 'mercenaries' | 'standard';
type SearchSortOption = `${SortOptions}:${SortDirection}`;
type SortDirection = 'asc' | 'desc';
type SortOptions = 'attack' | 'class' | 'dataAdded' | 'groupByClass' | 'health' | 'manaCost' | 'name';

//#endregion
//#region src/card-backs/types.d.ts
interface CardBackSearchParameters {
  cardBackCategory?: 'achieve' | 'base' | 'blizzard' | 'esports' | 'events' | 'fireside' | 'game_license' | 'golden' | 'heroes' | 'legend' | 'pre_purchase' | 'promotion' | 'season';
  locale?: Locales;
  page?: number;
  pageSize?: number;
  sort?: SearchSortOption;
  textFilter?: string;
}
interface CardBackSearchResponse {
  cardBacks: Array<SingleCardBackSearchResponse>;
  cardCount: number;
  page: number;
  pageCount: number;
}
interface SingleCardBackSearchResponse {
  id: number;
  image: string;
  name: Record<Locales, string> | string;
  slug: string;
  sortCategory: number;
  text: Record<Locales, string> | string;
}

//#endregion
//#region src/card-backs/card-backs.d.ts
/**
 * Returns a list of card backs based on the search parameters provided.
 * @param options The options for fetching card backs. See {@link CardBackSearchParameters}.
 * @returns The card back search resource. See {@link CardBackSearchResponse}.
 */
declare function cardBackSearch(options: CardBackSearchParameters): Resource<CardBackSearchResponse, CardBackSearchParameters>;
/**
 * Returns a single card back based on the ID provided.
 * @param id The card back ID
 * @param locale The locale to use for fetching the card back (optional).
 * @returns The card back resource. See {@link SingleCardBackSearchResponse}.
 */
declare function fetchOneCardBack(id: string, locale?: Locales): Resource<SingleCardBackSearchResponse, {
  locale?: Locales;
}>;

//#endregion
//#region src/cards/types.d.ts
interface BlizzardCardSearchParameters extends BaseSearchParameters {
  attack?: string;
  defaultMercenary?: string;
  health?: string;
  mercenaryId?: string;
}
interface CardSearchParameters extends BaseSearchParameters {
  attack?: Array<number> | number;
  defaultMercenary?: Array<number> | number;
  health?: Array<number> | number;
  mercenaryId?: Array<number> | number;
}
interface CardSearchResponse {
  cardCount: number;
  cards: Array<Card$1>;
  page: number;
  pageCount: number;
}
interface FetchOneCardResponse {
  artistName: string;
  attack: number;
  cardSetId: number;
  cardTypeId: number;
  classId: number;
  collectible: number;
  cropImage: string;
  flavorText: Record<Locales, string> | string;
  health: number;
  id: number;
  image: Record<Locales, string> | string;
  imageGold: Record<Locales, string> | string;
  isZilliaxCosmeticModule: boolean;
  isZilliaxFunctionalModule: boolean;
  keywordIds: Array<number>;
  manaCost: number;
  multiClassIds: Array<number>;
  name: Record<Locales, string> | string;
  rarityId: number;
  slug: string;
  text: Record<Locales, string> | string;
}
interface BaseSearchParameters {
  gameMode?: GameMode$1;
  locale?: Locales;
  mercenaryRole?: string;
  minionType?: string;
  page?: number;
  pageSize?: number;
  sort?: 'attack:asc' | 'attack:desc' | 'health:asc' | 'health:desc' | 'name:asc' | 'name:desc' | 'tier:asc' | 'tier:desc';
  textFilter?: string;
  tier?: 1 | 2 | 3 | 4 | 5 | 6 | 'hero';
}
interface Card$1 {
  artistName: null | string;
  attack: number;
  cardSetId: number;
  cardTypeId: number;
  classId: null | number;
  collectible: number;
  cropImage: null | string;
  flavorText: string;
  health: number;
  id: number;
  image: string;
  imageGold: string;
  isZilliaxCosmeticModule: boolean;
  isZilliaxFunctionalModule: boolean;
  manaCost: number;
  mercenaryHero: MercenaryHero;
  minionTypeId: number;
  multiClassIds: Array<number>;
  multiTypeIds?: Array<number>;
  name: string;
  rarityId: number;
  slug: string;
  text: string;
}
interface MercenaryHero {
  collectible: number;
  craftingCost: number;
  default: number;
  faction: null | number;
  mercId: number;
  rarity: number;
  roleId: number;
  statsByLevel: Record<string, StatsByLevel>;
}
interface StatsByLevel {
  attack: number;
  health: number;
}

//#endregion
//#region src/cards/cards.d.ts
/**
 * Returns a list of cards based on the search parameters provided.
 * @param options The options for fetching cards. See {@link CardSearchParameters}.
 * @returns The card search resource. See {@link CardSearchResponse}.
 */
declare function cardSearch(options: CardSearchParameters): Resource<CardSearchResponse, BlizzardCardSearchParameters>;
/**
 * Returns a single card based on the ID provided.
 * @param id The card ID
 * @param options The options for fetching a card.
 * @param options.gameMode The game mode to use for fetching the card (optional).
 * @param options.locale The locale to use for fetching the card (optional).
 * @returns The card resource. See {@link FetchOneCardResponse}.
 */
declare function fetchOneCard(id: string, options?: {
  gameMode?: GameMode$1;
  locale?: Locales;
}): Resource<FetchOneCardResponse, {
  gameMode?: GameMode$1;
  locale?: Locales;
}>;

//#endregion
//#region src/decks/types.d.ts
interface DeckResponse {
  cardCount: number;
  cards: Array<Card>;
  class: Class$1;
  deckCode: string;
  format: string;
  hero: Hero;
  heroPower: Hero;
  version: number;
}
type DeckSearchParameters = {
  code: string;
} | {
  hero?: string;
  ids: string;
};
interface Card {
  armor?: number;
  artistName: string;
  attack?: number;
  bannedFromSideboard?: number;
  cardSetId: number;
  cardTypeId: number;
  childIds?: Array<number>;
  classId: number;
  collectible: number;
  cropImage: string;
  flavorText: string;
  health?: number;
  id: number;
  image: string;
  imageGold: string;
  isZilliaxCosmeticModule: boolean;
  isZilliaxFunctionalModule: boolean;
  keywordIds?: Array<number>;
  manaCost: number;
  minionTypeId?: number;
  multiClassIds: Array<number>;
  name: string;
  rarityId: number;
  slug: string;
  spellSchoolId?: number;
  text: string;
}
interface Class$1 {
  id: number;
  name: string;
  slug: string;
}
interface Hero {
  artistName: null | string;
  cardSetId: number;
  cardTypeId: number;
  classId: number;
  collectible: number;
  cropImage: null;
  flavorText: string;
  health?: number;
  id: number;
  image: string;
  imageGold: string;
  isZilliaxCosmeticModule: boolean;
  isZilliaxFunctionalModule: boolean;
  manaCost: number;
  multiClassIds: Array<number>;
  name: string;
  parentId: number;
  rarityId: null | number;
  slug: string;
  text: string;
}

//#endregion
//#region src/decks/decks.d.ts
/**
 * Returns a deck based on the code provided.
 * @param options The options for fetching a deck.
 * @returns The deck resource. See {@link DeckResponse}.
 */
declare function getDeck(options: {
  code: string;
} | {
  hero?: string;
  ids: Array<string>;
}): Resource<DeckResponse, DeckSearchParameters>;

//#endregion
//#region ../wow/src/base.d.ts
/**
 * Base record interface containing name and id properties that often appear together in Blizzard API responses.
 */
interface NameId {
  id: number;
  name: string;
}

//#endregion
//#region src/metadata/types.d.ts
/**
 * Base record containing both {@link KeyBase} and {@link NameId} interfaces.
 */
interface AllMetadataResponse {
  arenaIds: Array<number>;
  bgGameModes: Array<GameMode>;
  cardBackCategories: Array<GameMode>;
  classes: Array<Class>;
  filterableFields: Array<string>;
  gameModes: Array<GameMode>;
  keywords: Array<Keyword>;
  mercenaryFactions: Array<GameMode>;
  mercenaryRoles: Array<GameMode>;
  minionTypes: Array<GameMode>;
  numericFields: Array<string>;
  rarities: Array<Rarity>;
  setGroups: Array<SetGroup>;
  sets: Array<Set>;
  spellSchools: Array<GameMode>;
  types: Array<GameMode>;
}
interface SpecificMetadataResponse extends NameId {
  aliasSetIds?: Array<number>;
  collectibleCount: number;
  collectibleRevealedCount: number;
  hyped: boolean;
  nonCollectibleCount: number;
  nonCollectibleRevealedCount: number;
  slug: string;
  type: SetType;
}
interface Class {
  alternateHeroCardIds?: Array<number>;
  cardId?: number;
  heroPowerCardId?: number;
  id: number;
  name: string;
  slug: string;
}
interface GameMode extends NameId {
  gameModes?: Array<number>;
  slug: string;
}
interface Keyword extends NameId {
  gameModes: Array<number>;
  refText: string;
  slug: string;
  text: string;
}
interface Rarity extends NameId {
  craftingCost: Array<null | number>;
  dustValue: Array<null | number>;
  slug: string;
}
interface Set extends NameId {
  aliasSetIds?: Array<number>;
  collectibleCount: number;
  collectibleRevealedCount: number;
  hyped: boolean;
  nonCollectibleCount: number;
  nonCollectibleRevealedCount: number;
  slug: string;
  type: SetType;
}
interface SetGroup {
  cardSets: Array<string>;
  icon?: string;
  name: string;
  slug: string;
  standard?: boolean;
  svg?: null | string;
  year?: number;
  yearRange?: string;
}
type SetType = '' | 'adventure' | 'base' | 'expansion';

//#endregion
//#region src/metadata/metadata.d.ts
/**
 * Returns all metadata
 * @returns The all metadata resource. See {@link AllMetadataResponse}.
 */
declare function allMetadata(): Resource<AllMetadataResponse>;
/**
 * Returns specific metadata based on the type requested.
 * @param type The type of metadata to retrieve.
 * @returns The specific metadata resource. See {@link SpecificMetadataResponse}.
 */
declare function specificMetadata(type: 'classes' | 'keywords' | 'minionTypes' | 'rarities' | 'setGroups' | 'sets' | 'types'): Resource<SpecificMetadataResponse>;

//#endregion
//#region src/index.d.ts
declare const hs: {
  cardBackSearch: typeof cardBackSearch;
  fetchOneCardBack: typeof fetchOneCardBack;
  cardSearch: typeof cardSearch;
  fetchOneCard: typeof fetchOneCard;
  getDeck: typeof getDeck;
  allMetadata: typeof allMetadata;
  specificMetadata: typeof specificMetadata;
};

//#endregion
export { AllMetadataResponse, BlizzardCardSearchParameters, CardBackSearchParameters, CardBackSearchResponse, CardSearchParameters, CardSearchResponse, DeckResponse, DeckSearchParameters, FetchOneCardResponse, SingleCardBackSearchResponse, SpecificMetadataResponse, allMetadata, cardBackSearch, cardSearch, hs as default, fetchOneCard, fetchOneCardBack, getDeck, hs, specificMetadata };
//# sourceMappingURL=index.d.ts.map