load("@rules_cc//cc:defs.bzl", "cc_library")
load("//tools:copts.bzl", "COPTS")

cc_library(
    name = "shardok_action",
    srcs = ["ShardokAction.cpp"],
    hdrs = ["ShardokAction.hpp"],
    copts = COPTS,
    visibility = [
        "//src/main/cpp/net/eagle0/shardok/ai/mcts:__pkg__",
        "//src/test/cpp/net/eagle0/common/mcts:__subpackages__",
    ],
    deps = [
        "//src/main/cpp/net/eagle0/common/mcts/abstract:mcts_action",
        "//src/main/cpp/net/eagle0/shardok/library:shardok_c_types",
        "//src/main/protobuf/net/eagle0/shardok/common:command_type_cc_proto",
    ],
)

cc_library(
    name = "shardok_game_state",
    srcs = ["ShardokGameState.cpp"],
    hdrs = ["ShardokGameState.hpp"],
    copts = COPTS,
    visibility = [
        "//src/main/cpp/net/eagle0/shardok/ai/mcts:__pkg__",
        "//src/test/cpp/net/eagle0/common/mcts:__subpackages__",
    ],
    deps = [
        "//src/main/cpp/net/eagle0/common/mcts/abstract:mcts_game_state",
        "//src/main/cpp/net/eagle0/shardok/ai:ai_strategy",
        "//src/main/cpp/net/eagle0/shardok/ai/score:ai_score_calculator_interface",
        "//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/settings:game_settings",
        "//src/main/protobuf/net/eagle0/shardok/common:command_type_cc_proto",
    ],
)

cc_library(
    name = "shardok_game_engine",
    srcs = ["ShardokGameEngine.cpp"],
    hdrs = ["ShardokGameEngine.hpp"],
    copts = COPTS,
    visibility = [
        "//src/main/cpp/net/eagle0/shardok/ai/mcts:__pkg__",
        "//src/test/cpp/net/eagle0/common/mcts:__subpackages__",
    ],
    deps = [
        ":shardok_action",
        ":shardok_game_state",
        "//src/main/cpp/net/eagle0/common:sequence_random_generator",
        "//src/main/cpp/net/eagle0/common/mcts/abstract:mcts_game_engine",
        "//src/main/cpp/net/eagle0/shardok/ai:ai_command_filter",
        "//src/main/cpp/net/eagle0/shardok/ai:ai_heuristic_weighting",
        "//src/main/cpp/net/eagle0/shardok/ai/score:ai_score_calculator_interface",
        "//src/main/cpp/net/eagle0/shardok/library:engine",
        "//src/main/cpp/net/eagle0/shardok/library:shardok_c_types",
        "//src/main/cpp/net/eagle0/shardok/library/settings:game_settings",
    ],
)

cc_library(
    name = "shardok_mcts_factory",
    srcs = ["ShardokMCTSFactory.cpp"],
    hdrs = ["ShardokMCTSFactory.hpp"],
    copts = COPTS,
    visibility = [
        "//src/main/cpp/net/eagle0/shardok/ai:__pkg__",
        "//src/main/cpp/net/eagle0/shardok/ai/mcts:__pkg__",
        "//src/test/cpp/net/eagle0/common/mcts:__subpackages__",
    ],
    deps = [
        ":shardok_action",
        ":shardok_game_engine",
        ":shardok_game_state",
        "//src/main/cpp/net/eagle0/shardok/ai:ai_command_filter",
        "//src/main/cpp/net/eagle0/shardok/ai/score:ai_score_calculator_interface",
        "//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/settings:game_settings",
    ],
)
