import { KeyBase, NameId, NameIdKey, NullishNameIdKey, Resource, ResponseBase } from "@blizzard-api/core";

//#region src/talent/types.d.ts
/**
 * The response for a pvp talent index.
 * @see {@link https://develop.battle.net/documentation/world-of-warcraft/game-data-apis}
 */
interface PvpTalentIndexResponse extends ResponseBase {
  pvp_talents: Array<NameIdKey>;
}
/**
 * The response for a pvp talent.
 * @see {@link https://develop.battle.net/documentation/world-of-warcraft/game-data-apis}
 */
interface PvpTalentResponse extends ResponseBase {
  compatible_slots: Array<number>;
  description: string;
  id: number;
  overrides_spell?: NameIdKey;
  playable_specialization: NameIdKey;
  spell: NameIdKey;
  unlock_player_level: number;
}
/**
 * The response for a talent index.
 * @see {@link https://develop.battle.net/documentation/world-of-warcraft/game-data-apis}
 */
interface TalentIndexResponse extends ResponseBase {
  talents: Array<NullishNameIdKey>;
}
/**
 * The response for a talent.
 * @see {@link https://develop.battle.net/documentation/world-of-warcraft/game-data-apis}
 */
interface TalentResponse extends ResponseBase {
  id: number;
  overrides_spell?: NameIdKey;
  playable_class?: KeyBase & {
    id: number;
    name?: string;
  };
  playable_specialization?: NameIdKey;
  rank_descriptions?: Array<RankDescription>;
  spell?: NameIdKey;
}
/**
 * The response for a talent tree index.
 * @see {@link https://develop.battle.net/documentation/world-of-warcraft/game-data-apis}
 */
interface TalentTreeIndexResponse extends ResponseBase {
  class_talent_trees: Array<TalentTree>;
  hero_talent_trees: Array<NameIdKey>;
  spec_talent_trees: Array<TalentTree>;
}
/**
 * The response for a talent tree nodes.
 * @see {@link https://develop.battle.net/documentation/world-of-warcraft/game-data-apis}
 */
interface TalentTreeNodesResponse extends ResponseBase {
  id: number;
  spec_talent_trees: Array<SpecTalentTree>;
  talent_nodes: Array<TalentNode>;
}
/**
 * The response for a talent tree.
 * @see {@link https://develop.battle.net/documentation/world-of-warcraft/game-data-apis}
 */
interface TalentTreeResponse extends NameId, ResponseBase {
  class_talent_nodes: Array<ClassTalentNode>;
  hero_talent_trees: Array<HeroTalentTree>;
  media: KeyBase;
  playable_class: NameIdKey;
  playable_specialization: NameIdKey;
  restriction_lines: Array<RestrictionLine>;
  spec_talent_nodes: Array<SpecTalentNode>;
}
interface ChoiceOfTooltip {
  spell_tooltip: PurpleSpellTooltip;
  talent: NameIdKey;
}
interface ClassTalentNode {
  display_col: number;
  display_row: number;
  id: number;
  locked_by?: Array<number>;
  node_type: NodeType;
  ranks: Array<ClassTalentNodeRank>;
  raw_position_x: number;
  raw_position_y: number;
  unlocks?: Array<number>;
}
interface ClassTalentNodeRank {
  choice_of_tooltips?: Array<Tooltip>;
  default_points?: number;
  rank: number;
  tooltip?: Tooltip;
}
interface HeroTalentTree extends NameId {
  hero_talent_nodes: Array<HeroTalentTreeNode>;
  media: KeyBase & {
    id: number;
  };
  playable_class: NameIdKey;
  playable_specializations: Array<NameIdKey>;
}
interface HeroTalentTreeNode {
  display_col: number;
  display_row: number;
  id: number;
  locked_by?: Array<number>;
  node_type: {
    id: number;
    type: 'ACTIVE' | 'CHOICE' | 'PASSIVE';
  };
  ranks: Array<Rank>;
  raw_position_x: number;
  raw_position_y: number;
  unlocks?: Array<number>;
}
interface NodeType {
  id: number;
  type: 'ACTIVE' | 'CHOICE' | 'PASSIVE';
}
interface PurpleSpellTooltip {
  cast_time: string;
  description: string;
  spell: NameIdKey;
}
interface Rank {
  choice_of_tooltips?: Array<Tooltip>;
  default_points?: number;
  rank: number;
  tooltip?: Tooltip;
}
interface RankDescription {
  description: null | string;
  rank: number;
}
interface RestrictionLine {
  is_for_class: boolean;
  required_points: number;
  restricted_row: number;
}
interface SpecTalentNode {
  display_col: number;
  display_row: number;
  id: number;
  locked_by?: Array<number>;
  node_type: NodeType;
  ranks: Array<SpecTalentNodeRank>;
  raw_position_x: number;
  raw_position_y: number;
  unlocks?: Array<number>;
}
interface SpecTalentNodeRank {
  choice_of_tooltips?: Array<ChoiceOfTooltip>;
  rank: number;
  tooltip?: Tooltip;
}
interface SpecTalentTree extends KeyBase {
  name: string;
}
interface TalentNode {
  display_col: number;
  display_row: number;
  id: number;
  locked_by?: Array<number>;
  node_type: NodeType;
  ranks: Array<Rank>;
  raw_position_x: number;
  raw_position_y: number;
  unlocks?: Array<number>;
}
interface TalentTree extends KeyBase {
  name: string;
}
interface Tooltip {
  spell_tooltip: TooltipSpellTooltip;
  talent: NameIdKey;
}
interface TooltipSpellTooltip {
  cast_time: string;
  cooldown?: string;
  description: string;
  power_cost?: string;
  range?: string;
  spell: NameIdKey;
}
//#endregion
//#region src/talent/index.d.ts
/**
 * Get a PvP talent by ID.
 * @param pvpTalentId The PvP talent ID.
 * @returns The PvP talent. See {@link PvpTalentResponse}.
 */
declare function pvpTalent(pvpTalentId: number): Resource<PvpTalentResponse>;
/**
 * Get a PvP talent index.
 * @returns The PvP talent index. See {@link PvpTalentIndexResponse}.
 */
declare function pvpTalentIndex(): Resource<PvpTalentIndexResponse>;
/**
 * Get a talent by ID.
 * @param talentId The talent ID.
 * @returns The talent. See {@link TalentResponse}.
 */
declare function talent(talentId: number): Resource<TalentResponse>;
/**
 * Get a talent index.
 * @returns The talent index. See {@link TalentIndexResponse}.
 */
declare function talentIndex(): Resource<TalentIndexResponse>;
/**
 * Get a talent tree by ID.
 * @param talentTreeId The talent tree ID.
 * @param specId The playable specialization ID.
 * @returns The talent tree. See {@link TalentTreeResponse}.
 */
declare function talentTree(talentTreeId: number, specId: number): Resource<TalentTreeResponse>;
/**
 * Get a talent tree index.
 * @returns The talent tree index. See {@link TalentTreeIndexResponse}.
 */
declare function talentTreeIndex(): Resource<TalentTreeIndexResponse>;
/**
 * Get talent tree nodes by talent tree ID.
 * @param talentTreeId The talent tree ID.
 * @returns The talent tree nodes. See {@link TalentTreeNodesResponse}.
 */
declare function talentTreeNodes(talentTreeId: number): Resource<TalentTreeNodesResponse>;
//#endregion
export { talentTree as a, PvpTalentIndexResponse as c, TalentResponse as d, TalentTreeIndexResponse as f, talentIndex as i, PvpTalentResponse as l, TalentTreeResponse as m, pvpTalentIndex as n, talentTreeIndex as o, TalentTreeNodesResponse as p, talent as r, talentTreeNodes as s, pvpTalent as t, TalentIndexResponse as u };
//# sourceMappingURL=index-DMt_YLrb2.d.ts.map