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

//#region src/achievements/types.d.ts
/**
 * Interface for a response from the achievement category index endpoint.
 * @see {@link https://develop.battle.net/documentation/world-of-warcraft/game-data-apis}
 */
interface AchievementCategoryIndexResponse extends ResponseBase {
  categories: Array<NameIdKey>;
  guild_categories: Array<NameIdKey>;
  root_categories: Array<NameIdKey>;
}
/**
 * Interface for a response from the achievement category endpoint.
 * @see {@link https://develop.battle.net/documentation/world-of-warcraft/game-data-apis}
 */
interface AchievementCategoryResponse extends NameId, ResponseBase {
  achievements: Array<NameIdKey>;
  aggregates_by_faction: {
    alliance: {
      points: number;
      quantity: number;
    };
    horde: {
      points: number;
      quantity: number;
    };
  };
  display_order: number;
  is_guild_category: boolean;
  parent_category?: NameIdKey;
  subcategories?: Array<NameIdKey>;
}
/**
 * Interface for a response from the achievement index endpoint.
 * @see {@link https://develop.battle.net/documentation/world-of-warcraft/game-data-apis}
 */
interface AchievementIndexResponse extends ResponseBase {
  achievements: Array<NameIdKey>;
}
/**
 * Interface for a response from the achievement media endpoint.
 * @see {@link https://develop.battle.net/documentation/world-of-warcraft/game-data-apis}
 */
interface AchievementMediaResponse extends ResponseBase {
  assets: Array<MediaAsset>;
  id: number;
}
/**
 * Interface for a response from the achievement endpoint.
 * @see {@link https://develop.battle.net/documentation/world-of-warcraft/game-data-apis}
 */
interface AchievementResponse extends NameId, ResponseBase {
  category: NameIdKey;
  criteria?: Criteria;
  description: null | string;
  display_order: number;
  guild_reward_items?: Array<NameIdKey>;
  is_account_wide: boolean;
  media: KeyBase & {
    id: number;
  };
  next_achievement?: NameIdKey;
  points: number;
  prerequisite_achievement?: NameIdKey;
  requirements?: {
    faction: Faction;
  };
  reward_description?: string;
  reward_item?: NameIdKey;
}
interface ChildCriteria {
  achievement?: NameIdKey;
  amount: number;
  child_criteria?: Array<ChildCriteria2>;
  description: null | string;
  faction?: Faction;
  id: number;
  is_gold?: boolean;
  operator?: Operator;
  show_progress_bar?: boolean;
}
interface ChildCriteria2 {
  achievement?: NameIdKey;
  amount: number;
  child_criteria?: Array<ChildCriteria3>;
  description: null | string;
  faction?: Faction;
  id: number;
  is_gold?: boolean;
  operator?: Operator;
  show_progress_bar?: boolean;
}
interface ChildCriteria3 {
  achievement?: NameIdKey;
  amount: number;
  description: null | string;
  faction?: Faction;
  id: number;
  is_gold?: boolean;
  operator?: Operator;
  show_progress_bar?: boolean;
}
interface Criteria {
  amount: number;
  child_criteria?: Array<ChildCriteria>;
  description: null | string;
  faction?: Faction;
  id: number;
  operator?: Operator;
  show_progress_bar?: boolean;
}
interface Operator {
  name: string;
  type: 'AND' | 'COMPLETE_AT_LEAST';
}
//#endregion
//#region src/achievements/index.d.ts
/**
 * Get an achievement by ID.
 * @param achievementId The achievement ID.
 * @returns The achievement. See {@link AchievementResponse}.
 */
declare function achievement(achievementId: number): Resource<AchievementResponse>;
/**
 * Get an achievement category by ID.
 * @param achievementCategoryId The achievement category ID.
 * @returns The achievement category. See {@link AchievementCategoryResponse}.
 */
declare function achievementCategory(achievementCategoryId: number): Resource<AchievementCategoryResponse>;
/**
 * Get an achievement category index.
 * @returns The achievement category index. See {@link AchievementCategoryIndexResponse}.
 */
declare function achievementCategoryIndex(): Resource<AchievementCategoryIndexResponse>;
/**
 * Get an achievement index.
 * @returns The achievement index. See {@link AchievementIndexResponse}.
 */
declare function achievementIndex(): Resource<AchievementIndexResponse>;
/**
 * Get achievement media by ID.
 * @param achievementId The achievement ID.
 * @returns The achievement media. See {@link AchievementMediaResponse}.
 */
declare function achievementMedia(achievementId: number): Resource<AchievementMediaResponse>;
//#endregion
export { achievementMedia as a, AchievementIndexResponse as c, achievementIndex as i, AchievementMediaResponse as l, achievementCategory as n, AchievementCategoryIndexResponse as o, achievementCategoryIndex as r, AchievementCategoryResponse as s, achievement as t, AchievementResponse as u };
//# sourceMappingURL=index-BdXHZTxx.d.ts.map