
/*
 * Copyright 2011-2022 Cuberite Contributors
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

// Statistics.cpp

#include "Globals.h"  // NOTE: MSVC stupidness requires this to be the same across all modules

#include "StatisticsManager.h"





bool StatisticsManager::SatisfiesPrerequisite(const CustomStatistic a_Stat) const
{
	switch (a_Stat)
	{
		case CustomStatistic::AchOpenInventory:      return true;
		case CustomStatistic::AchMineWood:           return IsStatisticPresent(CustomStatistic::AchOpenInventory);
		case CustomStatistic::AchBuildWorkBench:     return IsStatisticPresent(CustomStatistic::AchMineWood);
		case CustomStatistic::AchBuildHoe:           return IsStatisticPresent(CustomStatistic::AchBuildWorkBench);
		case CustomStatistic::AchBakeCake:           return IsStatisticPresent(CustomStatistic::AchBuildHoe);
		case CustomStatistic::AchMakeBread:          return IsStatisticPresent(CustomStatistic::AchBuildHoe);
		case CustomStatistic::AchBuildSword:         return IsStatisticPresent(CustomStatistic::AchBuildWorkBench);
		case CustomStatistic::AchKillCow:            return IsStatisticPresent(CustomStatistic::AchBuildSword);
		case CustomStatistic::AchFlyPig:             return IsStatisticPresent(CustomStatistic::AchKillCow);
		case CustomStatistic::AchBreedCow:           return IsStatisticPresent(CustomStatistic::AchKillCow);
		case CustomStatistic::AchKillEnemy:          return IsStatisticPresent(CustomStatistic::AchBuildSword);
		case CustomStatistic::AchSnipeSkeleton:      return IsStatisticPresent(CustomStatistic::AchKillEnemy);
		case CustomStatistic::AchBuildPickaxe:       return IsStatisticPresent(CustomStatistic::AchBuildWorkBench);
		case CustomStatistic::AchBuildBetterPickaxe: return IsStatisticPresent(CustomStatistic::AchBuildPickaxe);
		case CustomStatistic::AchBuildFurnace:       return IsStatisticPresent(CustomStatistic::AchBuildWorkBench);
		case CustomStatistic::AchCookFish:           return IsStatisticPresent(CustomStatistic::AchBuildFurnace);
		case CustomStatistic::AchAcquireIron:        return IsStatisticPresent(CustomStatistic::AchBuildFurnace);
		case CustomStatistic::AchOnARail:            return IsStatisticPresent(CustomStatistic::AchAcquireIron);
		case CustomStatistic::AchDiamonds:           return IsStatisticPresent(CustomStatistic::AchAcquireIron);
		case CustomStatistic::AchPortal:             return IsStatisticPresent(CustomStatistic::AchDiamonds);
		case CustomStatistic::AchGhast:              return IsStatisticPresent(CustomStatistic::AchPortal);
		case CustomStatistic::AchBlazeRod:           return IsStatisticPresent(CustomStatistic::AchPortal);
		case CustomStatistic::AchPotion:             return IsStatisticPresent(CustomStatistic::AchBlazeRod);
		case CustomStatistic::AchTheEnd:             return IsStatisticPresent(CustomStatistic::AchBlazeRod);
		case CustomStatistic::AchTheEnd2:            return IsStatisticPresent(CustomStatistic::AchTheEnd);
		case CustomStatistic::AchEnchantments:       return IsStatisticPresent(CustomStatistic::AchDiamonds);
		case CustomStatistic::AchOverkill:           return IsStatisticPresent(CustomStatistic::AchEnchantments);
		case CustomStatistic::AchBookcase:           return IsStatisticPresent(CustomStatistic::AchEnchantments);
		case CustomStatistic::AchExploreAllBiomes:   return IsStatisticPresent(CustomStatistic::AchTheEnd);
		case CustomStatistic::AchSpawnWither:        return IsStatisticPresent(CustomStatistic::AchTheEnd2);
		case CustomStatistic::AchKillWither:         return IsStatisticPresent(CustomStatistic::AchSpawnWither);
		case CustomStatistic::AchFullBeacon:         return IsStatisticPresent(CustomStatistic::AchKillWither);
		case CustomStatistic::AchDiamondsToYou:      return IsStatisticPresent(CustomStatistic::AchDiamonds);
		default: UNREACHABLE("Unsupported achievement type");
	}
}





bool StatisticsManager::IsStatisticPresent(const CustomStatistic a_Stat) const
{
	const auto Result = Custom.find(a_Stat);
	if (Result != Custom.end())
	{
		return Result->second > 0;
	}
	return false;
}
