//
// Standard implementation of AIScoreCalculator
//

#ifndef EAGLE0_STANDARDAISCORECALCULATOR_HPP
#define EAGLE0_STANDARDAISCORECALCULATOR_HPP

#include <memory>

#include "src/main/cpp/net/eagle0/shardok/ai/AIAttackLocations.hpp"
#include "src/main/cpp/net/eagle0/shardok/library/action_point_distances/ActionPointDistancesCache.hpp"
#include "src/main/cpp/net/eagle0/shardok/library/settings/GameSettings.hpp"

namespace shardok {

// Forward declarations
class AIScoreCalculator;

using APDCache = std::shared_ptr<ActionPointDistancesCache>;
using ALCache = std::unique_ptr<AttackLocationsCache>;

/// Factory function to create a StandardAIScoreCalculator.
/// Returns a unique_ptr to AIScoreCalculator to hide the implementation.
[[nodiscard]] auto MakeStandardAIScoreCalculator(
        const SettingsGetter& settingsGetter,
        const APDCache& apdCache,
        const ALCache& alCache) -> std::unique_ptr<AIScoreCalculator>;

}  // namespace shardok

#endif  // EAGLE0_STANDARDAISCORECALCULATOR_HPP
