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

//#region src/covenant/types.d.ts
/**
 * Interface for a response from the conduit index endpoint.
 * @see {@link https://develop.battle.net/documentation/world-of-warcraft/game-data-apis}
 */
interface ConduitIndexResponse extends ResponseBase {
  conduits: Array<NameIdKey>;
}
/**
 * Interface for a response from the conduit endpoint.
 * @see {@link https://develop.battle.net/documentation/world-of-warcraft/game-data-apis}
 */
interface ConduitResponse extends ResponseBase {
  id: number;
  item: NameIdKey;
  name: string;
  ranks: Array<Rank>;
  socket_type: SocketType;
}
/**
 * Interface for a response from the covenant index endpoint.
 * @see {@link https://develop.battle.net/documentation/world-of-warcraft/game-data-apis}
 */
interface CovenantIndexResponse extends ResponseBase {
  covenants: Array<NameIdKey>;
}
/**
 * Interface for a response from the covenant media endpoint.
 * @see {@link https://develop.battle.net/documentation/world-of-warcraft/game-data-apis}
 */
interface CovenantMediaResponse extends ResponseBase {
  assets?: Array<MediaAsset>;
}
/**
 * Interface for a response from the covenant endpoint.
 * @see {@link https://develop.battle.net/documentation/world-of-warcraft/game-data-apis}
 */
interface CovenantResponse extends ResponseBase {
  class_abilities?: Array<ClassAbility>;
  description: string;
  id: number;
  media?: Media;
  name: string;
  renown_rewards: Array<RenownReward>;
  signature_ability?: SignatureAbility;
  soulbinds?: Array<NameIdKey>;
}
/**
 * Interface for a response from the soulbind index endpoint.
 * @see {@link https://develop.battle.net/documentation/world-of-warcraft/game-data-apis}
 */
interface SoulbindIndexResponse extends ResponseBase {
  soulbinds: Array<NameIdKey>;
}
/**
 * Interface for a response from the soulbind endpoint.
 * @see {@link https://develop.battle.net/documentation/world-of-warcraft/game-data-apis}
 */
interface SoulbindResponse extends ResponseBase {
  covenant: NameIdKey;
  creature: NameIdKey;
  follower: NameId;
  id: number;
  name: string;
  talent_tree: NameIdKey;
}
interface ClassAbility {
  id: number;
  playable_class: NameIdKey;
  spell_tooltip: ClassAbilitySpellTooltip;
}
interface ClassAbilitySpellTooltip {
  cast_time: string;
  cooldown?: string;
  description: string;
  power_cost?: null | string;
  range?: string;
  spell: NameIdKey;
}
interface Media extends KeyBase {
  id: number;
}
interface Rank {
  id: number;
  spell_tooltip: SpellTooltip;
  tier: number;
}
interface RenownReward {
  level: number;
  reward: NameIdKey;
}
interface SignatureAbility {
  id: number;
  spell_tooltip: SignatureAbilitySpellTooltip;
}
interface SignatureAbilitySpellTooltip {
  cast_time: string;
  cooldown?: string;
  description: string;
  range?: string;
  spell: NameIdKey;
}
interface SocketType {
  name: string;
  type: string;
}
interface SpellTooltip {
  cast_time: string;
  description: string;
  spell: NameIdKey;
}
//#endregion
//#region src/covenant/index.d.ts
/**
 * Get a conduit by ID.
 * @param conduitId The conduit ID.
 * @returns The conduit. See {@link ConduitResponse}.
 */
declare function conduit(conduitId: number): Resource<ConduitResponse>;
/**
 * Get a conduit index.
 * @returns The conduit index. See {@link ConduitIndexResponse}.
 */
declare function conduitIndex(): Resource<ConduitIndexResponse>;
/**
 * Get a covenant by ID.
 * @param covenantId The covenant ID.
 * @returns The covenant. See {@link CovenantResponse}.
 */
declare function covenant(covenantId: number): Resource<CovenantResponse>;
/**
 * Get a covenant index.
 * @returns The covenant index. See {@link CovenantIndexResponse}.
 */
declare function covenantIndex(): Resource<CovenantIndexResponse>;
/**
 * Get covenant media by ID.
 * @param covenantId The covenant ID.
 * @returns The covenant media. See {@link CovenantMediaResponse}.
 */
declare function covenantMedia(covenantId: number): Resource<CovenantMediaResponse>;
/**
 * Get a soulbind by ID.
 * @param soulbindId The soulbind ID.
 * @returns The soulbind. See {@link SoulbindResponse}.
 */
declare function soulbind(soulbindId: number): Resource<SoulbindResponse>;
/**
 * Get a soulbind index.
 * @returns The soulbind index. See {@link SoulbindIndexResponse}.
 */
declare function soulbindIndex(): Resource<SoulbindIndexResponse>;
//#endregion
export { covenantMedia as a, ConduitIndexResponse as c, CovenantMediaResponse as d, CovenantResponse as f, covenantIndex as i, ConduitResponse as l, SoulbindResponse as m, conduitIndex as n, soulbind as o, SoulbindIndexResponse as p, covenant as r, soulbindIndex as s, conduit as t, CovenantIndexResponse as u };
//# sourceMappingURL=index-CJQWVNOh.d.ts.map