/**
   * Returns the stats for individual missions for this user containing all Alien Swarm missions
   *
   * <p>If the mission stats haven't been parsed already, parsing is done now.
   *
   * @return The mission stats for this player
   */
  public Map<String, Object> getMissionStats() {
    if (!this.isPublic()) {
      return null;
    }

    if (this.missionStats == null) {
      this.missionStats = new HashMap<String, Object>();
      for (XMLData missionData : this.xmlData.getElements("stats", "missions")) {
        this.missionStats.put(missionData.getName(), new AlienSwarmMission(missionData));
      }
    }

    return this.missionStats;
  }
  /**
   * Creates a new <code>AlienSwarmStats</code> instance by calling the super constructor with the
   * game name <code>"alienswarm"</code>
   *
   * @param steamId The custom URL or the 64bit Steam ID of the user
   * @throws SteamCondenserException if an error occurs while fetching the stats data
   */
  public AlienSwarmStats(Object steamId) throws SteamCondenserException {
    super(steamId, "alienswarm");

    if (this.isPublic()) {
      XMLData lifetimeStats = this.xmlData.getElement("stats", "lifetime");
      this.hoursPlayed = lifetimeStats.getString("timeplayed");

      this.lifetimeStats = new HashMap<String, Object>();
      this.lifetimeStats.put("accuracy", lifetimeStats.getFloat("accuracy"));
      this.lifetimeStats.put("aliensBurned", lifetimeStats.getInteger("aliensburned"));
      this.lifetimeStats.put("aliensKilled", lifetimeStats.getInteger("alienskilled"));
      this.lifetimeStats.put("campaigns", lifetimeStats.getInteger("campaigns"));
      this.lifetimeStats.put("damageTaken", lifetimeStats.getInteger("damagetaken"));
      this.lifetimeStats.put("experience", lifetimeStats.getInteger("experience"));
      this.lifetimeStats.put("experienceRequired", lifetimeStats.getInteger("xprequired"));
      this.lifetimeStats.put("fastHacks", lifetimeStats.getInteger("fasthacks"));
      this.lifetimeStats.put("friendlyFire", lifetimeStats.getInteger("friendlyfire"));
      this.lifetimeStats.put("gamesSuccessful", lifetimeStats.getInteger("gamessuccess"));
      this.lifetimeStats.put("healing", lifetimeStats.getInteger("healing"));
      this.lifetimeStats.put("killsPerHour", lifetimeStats.getFloat("killsperhour"));
      this.lifetimeStats.put("level", lifetimeStats.getInteger("level"));
      this.lifetimeStats.put("promotion", lifetimeStats.getInteger("promotion"));
      this.lifetimeStats.put("nextUnlock", lifetimeStats.getString("nextunlock"));
      this.lifetimeStats.put("nextUnlockImg", BASE_URL + lifetimeStats.getString("nextunlockimg"));
      this.lifetimeStats.put("shotsFired", lifetimeStats.getInteger("shotsfired"));
      this.lifetimeStats.put("totalGames", lifetimeStats.getInteger("totalgames"));

      if ((Integer) this.lifetimeStats.get("promotion") > 0) {
        this.lifetimeStats.put("promotionImg", BASE_URL + lifetimeStats.getString("promotionpic"));
      }

      this.lifetimeStats.put(
          "games_successful_percentage",
          ((Integer) this.lifetimeStats.get("totalGames") > 0)
              ? ((Integer) this.lifetimeStats.get("gamesSuccessful")).floatValue()
                  / (Integer) this.lifetimeStats.get("totalGames")
              : 0);
    }
  }
  /**
   * Returns the item stats for this user like ammo deployed and medkits used
   *
   * <p>If the items haven't been parsed already, parsing is done now.
   *
   * @return The item stats of this player
   */
  public Map<String, Object> getItemStats() {
    if (!this.isPublic()) {
      return null;
    }

    if (this.itemStats == null) {
      XMLData itemStatsData = this.xmlData.getElement("stats", "weapons");

      this.itemStats = new HashMap<String, Object>();
      this.itemStats.put("ammoDeployed", itemStatsData.getInteger("ammo_deployed"));
      this.itemStats.put("sentrygunsDeployed", itemStatsData.getInteger("sentryguns_deployed"));
      this.itemStats.put(
          "sentryFlamersDeployed", itemStatsData.getInteger("sentry_flamers_deployed"));
      this.itemStats.put(
          "sentryFreezeDeployed", itemStatsData.getInteger("sentry_freeze_deployed"));
      this.itemStats.put(
          "sentryCannonDeployed", itemStatsData.getInteger("sentry_cannon_deployed"));
      this.itemStats.put("medkitsUsed", itemStatsData.getInteger("medkits_used"));
      this.itemStats.put("flaresUsed", itemStatsData.getInteger("flares_used"));
      this.itemStats.put("adrenalineUsed", itemStatsData.getInteger("adrenaline_used"));
      this.itemStats.put("teslaTrapsDeployed", itemStatsData.getInteger("tesla_traps_deployed"));
      this.itemStats.put(
          "freezeGrenadesThrown", itemStatsData.getInteger("freeze_grenades_thrown"));
      this.itemStats.put("electricArmorUsed", itemStatsData.getInteger("electric_armor_used"));
      this.itemStats.put("healgunHeals", itemStatsData.getInteger("healgun_heals"));
      this.itemStats.put("healgunHealsSelf", itemStatsData.getInteger("healgun_heals_self"));
      this.itemStats.put("healbeaconHeals", itemStatsData.getInteger("healbeacon_heals"));
      this.itemStats.put("healbeaconHealsSelf", itemStatsData.getInteger("healbeacon_heals_self"));
      this.itemStats.put("damageAmpsUsed", itemStatsData.getInteger("damage_amps_used"));
      this.itemStats.put("healbeaconsDeployed", itemStatsData.getInteger("healbeacons_deployed"));
      this.itemStats.put("healbeaconHealsPct", itemStatsData.getFloat("healbeacon_heals_pct"));
      this.itemStats.put("healgunHealsPct", itemStatsData.getFloat("healgun_heals_pct"));
      this.itemStats.put(
          "healbeaconHealsPctSelf", itemStatsData.getFloat("healbeacon_heals_pct_self"));
      this.itemStats.put("healgunHealsPctSelf", itemStatsData.getFloat("healgun_heals_pct_self"));
    }

    return this.itemStats;
  }
  /**
   * Returns the favorites of this user like weapons and marine
   *
   * <p>If the favorites haven't been parsed already, parsing is done now.
   *
   * @return The favorites of this player
   */
  public Map<String, Object> getFavorites() {
    if (!this.isPublic()) {
      return null;
    }

    if (this.favorites == null) {
      XMLData favoritesData = this.xmlData.getElement("stats", "favorites");

      this.favorites = new HashMap<String, Object>();
      this.favorites.put("class", favoritesData.getString("class"));
      this.favorites.put("classImg", favoritesData.getString("classimg"));
      this.favorites.put("classPercentage", favoritesData.getFloat("classpct"));
      this.favorites.put("difficulty", favoritesData.getString("difficulty"));
      this.favorites.put("difficultyPercentage", favoritesData.getFloat("difficultypct"));
      this.favorites.put("extra", favoritesData.getString("extra"));
      this.favorites.put("extraImg", favoritesData.getString("extraimg"));
      this.favorites.put("extraPercentage", favoritesData.getFloat("extrapct"));
      this.favorites.put("marine", favoritesData.getString("marine"));
      this.favorites.put("marineImg", favoritesData.getString("marineimg"));
      this.favorites.put("marinePercentage", favoritesData.getFloat("marinepct"));
      this.favorites.put("mission", favoritesData.getString("mission"));
      this.favorites.put("missionImg", favoritesData.getString("missionimg"));
      this.favorites.put("missionPercentage", favoritesData.getFloat("missionpct"));
      this.favorites.put("primaryWeapon", favoritesData.getString("primary"));
      this.favorites.put("primaryWeaponImg", favoritesData.getString("primaryimg"));
      this.favorites.put("primaryWeaponPercentage", favoritesData.getFloat("primarypct"));
      this.favorites.put("secondaryWeapon", favoritesData.getString("secondary"));
      this.favorites.put("secondaryWeaponImg", favoritesData.getString("secondaryimg"));
      this.favorites.put("secondaryWeapon_Percentage", favoritesData.getFloat("secondarypct"));
    }

    return this.favorites;
  }