import { BaseSearchParameters, BlizzardNamespaces, Color, KeyBase, Locales, MediaAsset, NameId, NameIdKey, Resource, ResponseBase, SearchResponseWithoutResults } from "@blizzard-api/core";

//#region src/item/types.d.ts
/**
 * The response for an item class index.
 * @see {@link https://develop.battle.net/documentation/world-of-warcraft/game-data-apis}
 */
interface ItemClassIndexResponse extends ResponseBase {
  item_classes: Array<NameIdKey>;
}
/**
 * The response for an item class.
 * @see {@link https://develop.battle.net/documentation/world-of-warcraft/game-data-apis}
 */
interface ItemClassResponse extends ResponseBase {
  class_id: number;
  item_subclasses?: Array<NameIdKey>;
  name: string;
}
/**
 * The response for an item media.
 * @see {@link https://develop.battle.net/documentation/world-of-warcraft/game-data-apis}
 */
interface ItemMediaResponse extends ResponseBase {
  assets: Array<MediaAsset>;
  id: number;
}
/**
 * The response for an item.
 * @see {@link https://develop.battle.net/documentation/world-of-warcraft/game-data-apis}
 */
interface ItemResponse extends NameId, ResponseBase {
  appearances?: Array<KeyBase & {
    id: number;
  }>;
  description?: string;
  inventory_type: InventoryTypeName;
  is_equippable: boolean;
  is_stackable: boolean;
  item_class: NameIdKey;
  item_subclass: NameIdKey;
  level: number;
  max_count: number;
  media: Media;
  preview_item: PreviewItem;
  purchase_price: number;
  purchase_quantity: number;
  quality: ItemQuality;
  required_level: number;
  sell_price: number;
}
/**
 * The parameters for an item 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 ItemSearchParameters extends BaseSearchParameters {
  locale: Locales;
  name: string;
}
/**
 * The response for an item 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 ItemSearchResponse extends SearchResponseWithoutResults {
  results: Array<ItemSearchResponseItem>;
}
/**
 * The response for an item subclass.
 * @see {@link https://develop.battle.net/documentation/world-of-warcraft/game-data-apis}
 */
interface ItemSubClassResponse extends ResponseBase {
  class_id: number;
  display_name: string;
  hide_subclass_in_tooltips?: boolean;
  subclass_id: number;
  verbose_name?: string;
}
interface Armor {
  display: Display;
  value: number;
}
interface Damage {
  damage_class: {
    name: string;
    type: string;
  };
  display_string: string;
  max_value: number;
  min_value: number;
}
interface Display {
  color: Color;
  display_string: string;
}
interface Durability {
  display_string: string;
  value: number;
}
type InventoryType = 'BACK' | 'CHEST' | 'FEET' | 'FINGER' | 'HANDS' | 'HEAD' | 'LEGS' | 'NECK' | 'SHOULDER' | 'TRINKET' | 'WAIST' | 'WRIST' | 'RANGED' | 'THROWN' | 'TWOHWEAPON' | 'WEAPON' | 'WEAPONMAINHAND' | 'WEAPONOFFHAND' | 'BAG' | 'NON_EQUIP' | 'SHIRT' | 'TABARD';
interface InventoryTypeName {
  name: string;
  type: InventoryType;
}
interface InventoryTypeNameFromSearch {
  name: Record<Locales, string>;
  type: InventoryType;
}
interface ItemQuality {
  name: string;
  type: ItemQualityType;
}
interface ItemQualityFromSearch {
  name: Record<Locales, string>;
  type: ItemQualityType;
}
type ItemQualityType = 'ARTIFACT' | 'COMMON' | 'EPIC' | 'HEIRLOOM' | 'LEGENDARY' | 'POOR' | 'RARE' | 'UNCOMMON';
interface ItemSearchResponseItem extends KeyBase {
  data: {
    appearances?: Array<{
      id: number;
    }>;
    id: number;
    inventory_type: InventoryTypeNameFromSearch;
    is_equippable: boolean;
    is_stackable: boolean;
    item_class: {
      id: number;
      name: Record<Locales, string>;
    };
    item_subclass: {
      id: number;
      name: Record<Locales, string>;
    };
    level: number;
    max_count: number;
    media: {
      id: number;
    };
    name: Record<Locales, string | undefined>;
    purchase_price: number;
    purchase_quantity: number;
    quality: ItemQualityFromSearch;
    required_level: number;
    sell_price: number;
  };
}
interface Media extends KeyBase {
  id: number;
}
interface PreviewItem {
  armor?: Armor;
  binding?: {
    name: string;
    type: string;
  };
  bonus_list?: Array<number>;
  container_slots?: Durability;
  context?: number;
  crafting_reagent?: string;
  description?: string;
  durability?: Durability;
  inventory_type: InventoryTypeName;
  is_subclass_hidden?: boolean;
  item: Media;
  item_class: NameIdKey;
  item_subclass: NameIdKey;
  level?: Durability;
  media: Media;
  name: string;
  quality: ItemQuality;
  recipe?: Recipe;
  requirements?: Requirements;
  sell_price?: {
    display_strings: RecipeItemDisplayStrings;
    value: number;
  };
  shield_block?: Armor;
  spells?: Array<Spell>;
  stats?: Array<Stat>;
  unique_equipped?: 'Unique';
  weapon?: Weapon;
}
interface Recipe {
  item: RecipeItem;
  reagents: Array<NameIdKey & {
    quantity: number;
  }>;
  reagents_display_string: string;
}
interface RecipeItem {
  armor?: Armor;
  binding: {
    name: string;
    type: string;
  };
  durability: Durability;
  inventory_type: InventoryTypeName;
  item: Media;
  item_class: NameIdKey;
  item_subclass: NameIdKey;
  level: Durability;
  media: Media;
  name: string;
  quality: ItemQuality;
  requirements: Requirements;
  sell_price: {
    display_strings: RecipeItemDisplayStrings;
    value: number;
  };
  stats: Array<Stat>;
  weapon?: Weapon;
}
interface RecipeItemDisplayStrings {
  copper: string;
  gold: string;
  header: string;
  silver: string;
}
interface Requirements {
  level: Durability;
}
interface Spell {
  description: string;
  spell: NameIdKey;
}
interface Stat {
  display: Display;
  is_negated?: boolean;
  type: {
    name: string;
    type: StatTypeCapitalized;
  };
  value: number;
}
type StatTypeCapitalized = 'AGILITY' | 'ARCANE_RESISTANCE' | 'CRIT_RATING' | 'FIRE_RESISTANCE' | 'FROST_RESISTANCE' | 'HASTE_RATING' | 'INTELLECT' | 'MASTERY' | 'NATURE_RESISTANCE' | 'SHADOW_RESISTANCE' | 'STAMINA' | 'STRENGTH' | 'VERSATILITY';
interface Weapon {
  additional_damage?: Array<Damage>;
  attack_speed: Durability;
  damage: Damage;
  dps: Durability;
}
//#endregion
//#region src/item/index.d.ts
/**
 * Get an item by ID.
 * @param namespace The namespace to use. See {@link BlizzardNamespaces}.
 * @param itemId The item ID.
 * @returns The item. See {@link ItemResponse}.
 */
declare function item(namespace: Extract<BlizzardNamespaces, 'static-classic1x' | 'static-classic'>, itemId: number): Resource<ItemResponse>;
/**
 * Get an item class by ID.
 * @param namespace The namespace to use. See {@link BlizzardNamespaces}.
 * @param itemClassId The item class ID.
 * @returns The item class. See {@link ItemClassResponse}.
 */
declare function itemClass(namespace: Extract<BlizzardNamespaces, 'static-classic1x' | 'static-classic'>, itemClassId: number): Resource<ItemClassResponse>;
/**
 * Get an item class index.
 * @param namespace The namespace to use. See {@link BlizzardNamespaces}.
 * @returns The item class index. See {@link ItemClassIndexResponse}.
 */
declare function itemClassIndex(namespace: Extract<BlizzardNamespaces, 'static-classic1x' | 'static-classic'>): Resource<ItemClassIndexResponse>;
/**
 * Get item media by ID.
 * @param namespace The namespace to use. See {@link BlizzardNamespaces}.
 * @param itemId The item ID.
 * @returns The item media. See {@link ItemMediaResponse}.
 */
declare function itemMedia(namespace: Extract<BlizzardNamespaces, 'static-classic1x' | 'static-classic'>, itemId: number): Resource<ItemMediaResponse>;
/**
 * Search for items.
 * @param namespace The namespace to use. See {@link BlizzardNamespaces}.
 * @param options The search parameters. See {@link ItemSearchParameters}.
 * @returns The search results. See {@link ItemSearchResponse}.
 */
declare function itemSearch(namespace: Extract<BlizzardNamespaces, 'static-classic1x' | 'static-classic'>, options: ItemSearchParameters): Resource<ItemSearchResponse, Omit<ItemSearchParameters, 'locale' | 'name'>>;
/**
 * Get an item subclass by ID.
 * @param namespace The namespace to use. See {@link BlizzardNamespaces}.
 * @param itemClassId The item class ID.
 * @param itemSubclassId The item subclass ID.
 * @returns The item subclass. See {@link ItemSubClassResponse}.
 */
declare function itemSubClass(namespace: Extract<BlizzardNamespaces, 'static-classic1x' | 'static-classic'>, itemClassId: number, itemSubclassId: number): Resource<ItemSubClassResponse>;
//#endregion
export { itemSearch as a, ItemClassResponse as c, ItemSearchParameters as d, ItemSearchResponse as f, itemMedia as i, ItemMediaResponse as l, itemClass as n, itemSubClass as o, ItemSubClassResponse as p, itemClassIndex as r, ItemClassIndexResponse as s, item as t, ItemResponse as u };
//# sourceMappingURL=index-u8N9Fa6T.d.ts.map