load("//tools:copts.bzl", "COPTS")

cc_library(
    name = "ai_score_calculator_interface",
    hdrs = ["AIScoreCalculator.hpp"],
    copts = COPTS,
    visibility = [
        "//src/main/cpp/net/eagle0/shardok/ai:__subpackages__",
        "//src/main/cpp/net/eagle0/shardok/ai_performance_runner:__pkg__",
        "//src/test/cpp/net/eagle0/shardok/ai:__subpackages__",
    ],
    deps = [
        "//src/main/cpp/net/eagle0/shardok/ai:ai_attack_locations",
        "//src/main/cpp/net/eagle0/shardok/library:game_state_w",
        "//src/main/cpp/net/eagle0/shardok/library:shardok_c_types",
        "//src/main/cpp/net/eagle0/shardok/library/action_point_distances:action_point_distances_cache",
        "//src/main/cpp/net/eagle0/shardok/library/map:coords_set",
    ],
)

cc_library(
    name = "ai_victory_condition_score_calculator",
    srcs = ["AIVictoryConditionScoreCalculator.cpp"],
    hdrs = ["AIVictoryConditionScoreCalculator.hpp"],
    copts = COPTS,
    visibility = [
        "//src/main/cpp/net/eagle0/shardok/ai/score/private:__pkg__",  # Needed by abstract base class
        "//src/main/cpp/net/eagle0/shardok/ai_performance_runner:__pkg__",
        "//src/test/cpp/net/eagle0/shardok/ai:__subpackages__",
    ],
    deps = [
        "//src/main/cpp/net/eagle0/shardok/ai:ai_attack_groups",
        "//src/main/cpp/net/eagle0/shardok/ai:ai_attack_locations",
        "//src/main/cpp/net/eagle0/shardok/ai:ai_common_types",
        "//src/main/cpp/net/eagle0/shardok/ai:ai_distance_debuf",
        "//src/main/cpp/net/eagle0/shardok/ai:ai_score_utilities",
        "//src/main/cpp/net/eagle0/shardok/library:game_state_w",
        "//src/main/cpp/net/eagle0/shardok/library/action_point_distances",
        "//src/main/cpp/net/eagle0/shardok/library/action_point_distances:action_point_distances_cache",
        "//src/main/flatbuffer/net/eagle0/shardok/storage:game_state_cc_fbs",
    ],
)

cc_library(
    name = "normalized_ai_score_calculator",
    srcs = ["NormalizedAIScoreCalculator.cpp"],
    hdrs = ["NormalizedAIScoreCalculator.hpp"],
    copts = COPTS,
    visibility = [
        "//src/main/cpp/net/eagle0/shardok/ai:__subpackages__",
        "//src/main/cpp/net/eagle0/shardok/ai_performance_runner:__pkg__",
        "//src/test/cpp/net/eagle0/shardok/ai:__subpackages__",
    ],
    deps = [
        ":ai_score_calculator_interface",
        ":ai_victory_condition_score_calculator",
        "//src/main/cpp/net/eagle0/shardok/ai:ai_strategy",
        "//src/main/cpp/net/eagle0/shardok/ai:ai_unit_score_calculator",
        "//src/main/cpp/net/eagle0/shardok/ai:ai_water_crossing_calculator",
        "//src/main/cpp/net/eagle0/shardok/ai/score/private:abstract_ai_score_calculator",
        "//src/main/cpp/net/eagle0/shardok/ai/score/private:ai_score_calculator_shared_utilities",
        "//src/main/cpp/net/eagle0/shardok/library:engine",
        "//src/main/cpp/net/eagle0/shardok/library:game_state_w",
        "//src/main/cpp/net/eagle0/shardok/library/map:coords_set",
        "//src/main/cpp/net/eagle0/shardok/library/settings:game_settings",
    ],
)

cc_library(
    name = "standard_ai_score_calculator",
    srcs = ["StandardAIScoreCalculator.cpp"],
    hdrs = ["StandardAIScoreCalculator.hpp"],
    copts = COPTS,
    visibility = [
        "//src/main/cpp/net/eagle0/shardok/ai:__subpackages__",
        "//src/main/cpp/net/eagle0/shardok/ai_performance_runner:__pkg__",
        "//src/test/cpp/net/eagle0/shardok/ai:__subpackages__",
    ],
    deps = [
        ":ai_score_calculator_interface",
        ":ai_victory_condition_score_calculator",
        "//src/main/cpp/net/eagle0/shardok/ai:ai_strategy",
        "//src/main/cpp/net/eagle0/shardok/ai:ai_unit_score_calculator",
        "//src/main/cpp/net/eagle0/shardok/ai:ai_water_crossing_calculator",
        "//src/main/cpp/net/eagle0/shardok/ai/score/private:abstract_ai_score_calculator",
        "//src/main/cpp/net/eagle0/shardok/library:engine",
        "//src/main/cpp/net/eagle0/shardok/library:game_state_w",
    ],
)

cc_library(
    name = "mcts_optimized_ai_score_calculator",
    srcs = ["MCTSOptimizedAIScoreCalculator.cpp"],
    hdrs = ["MCTSOptimizedAIScoreCalculator.hpp"],
    copts = COPTS,
    visibility = [
        "//src/main/cpp/net/eagle0/shardok/ai:__subpackages__",
        "//src/main/cpp/net/eagle0/shardok/ai_performance_runner:__pkg__",
        "//src/test/cpp/net/eagle0/shardok/ai:__subpackages__",
    ],
    deps = [
        ":ai_score_calculator_interface",
        ":ai_victory_condition_score_calculator",
        "//src/main/cpp/net/eagle0/shardok/ai:ai_strategy",
        "//src/main/cpp/net/eagle0/shardok/ai:ai_unit_score_calculator",
        "//src/main/cpp/net/eagle0/shardok/ai:ai_water_crossing_calculator",
        "//src/main/cpp/net/eagle0/shardok/ai/score/private:abstract_ai_score_calculator",
        "//src/main/cpp/net/eagle0/shardok/ai/score/private:ai_score_calculator_shared_utilities",
        "//src/main/cpp/net/eagle0/shardok/library:engine",
        "//src/main/cpp/net/eagle0/shardok/library:game_state_w",
    ],
)
