"""Auto-generated type stubs for IncludeCPP module wrappers.

This file enables VSCode IntelliSense autocomplete for C++ modules.
DO NOT EDIT - Auto-generated by IncludeCPP build system.
"""

from typing import Any, List, Dict, Optional, Union, Protocol, overload

class Combat_simModuleWrapper(Protocol):
    """Type hints for combat_sim module wrapper (VSCode autocomplete support)."""

    def getInfo(self) -> Dict[str, Any]:
        """Get combat_sim module information."""
        ...

    class CombatConfig:
        """C++ class: CombatConfig"""

        def __init__(self) -> None:
            """Initialize CombatConfig instance"""
            ...

        def set_base_hit_chance(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: set_base_hit_chance"""
            ...

        def set_casualty_rate(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: set_casualty_rate"""
            ...

        def set_defender_bonus(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: set_defender_bonus"""
            ...


    class CombatResult:
        """C++ class: CombatResult"""

        def __init__(self) -> None:
            """Initialize CombatResult instance"""
            ...

        def get_attacker_loss_ratio(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: get_attacker_loss_ratio"""
            ...

        def get_defender_loss_ratio(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: get_defender_loss_ratio"""
            ...

        def is_decisive(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: is_decisive"""
            ...


    class CombatRewards:
        """C++ class: CombatRewards"""

        @overload
        def __init__(self) -> None: ...
        @overload
        def __init__(self, arg0: int, arg1: int, arg2: int, arg3: int) -> None: ...

        def __init__(self, *args: Any, **kwargs: Any) -> None:
            """Initialize CombatRewards instance"""
            ...

        pass

    class CombatSimulator:
        """C++ class: CombatSimulator"""

        @overload
        def __init__(self, arg0: Any) -> None: ...
        @overload
        def __init__(self, arg0: Any, arg1: Any) -> None: ...

        def __init__(self, *args: Any, **kwargs: Any) -> None:
            """Initialize CombatSimulator instance"""
            ...

        def estimate_casualties(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: estimate_casualties"""
            ...

        def estimate_win_probability(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: estimate_win_probability"""
            ...

        def get_config(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: get_config"""
            ...

        def quick_combat_check(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: quick_combat_check"""
            ...

        def set_config(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: set_config"""
            ...

        def set_seed(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: set_seed"""
            ...

        def simulate(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: simulate"""
            ...


    class CombatType:
        """C++ class: CombatType"""

        def __init__(self) -> None:
            """Initialize CombatType instance"""
            ...

        pass

    class CombatTypeHelper:
        """C++ class: CombatTypeHelper"""

        def __init__(self) -> None:
            """Initialize CombatTypeHelper instance"""
            ...

        def determine_combat_type(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: determine_combat_type"""
            ...

        def get_game_mode_name(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: get_game_mode_name"""
            ...

        def get_required_wins(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: get_required_wins"""
            ...

        def get_stun_turns_on_loss(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: get_stun_turns_on_loss"""
            ...


    class RewardCalculator:
        """C++ class: RewardCalculator"""

        def __init__(self) -> None:
            """Initialize RewardCalculator instance"""
            ...

        def calculate_turn_rewards(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: calculate_turn_rewards"""
            ...

        def calculate_victory_rewards(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: calculate_victory_rewards"""
            ...


    class SoldierUtils:
        """C++ class: SoldierUtils"""

        def __init__(self) -> None:
            """Initialize SoldierUtils instance"""
            ...

        def calculate_base_regen(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: calculate_base_regen"""
            ...

        def calculate_strategic_value(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: calculate_strategic_value"""
            ...

        def get_advantage_ratio(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: get_advantage_ratio"""
            ...

        def get_reinforcement_priority(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: get_reinforcement_priority"""
            ...

        def is_push_scenario(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: is_push_scenario"""
            ...

        def is_valid_transfer(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: is_valid_transfer"""
            ...




class Mcts_engineModuleWrapper(Protocol):
    """Type hints for mcts_engine module wrapper (VSCode autocomplete support)."""

    def getInfo(self) -> Dict[str, Any]:
        """Get mcts_engine module information."""
        ...

    class AIAction:
        """C++ class: AIAction"""

        @overload
        def __init__(self) -> None: ...
        @overload
        def __init__(self, arg0: int, arg1: int, arg2: int, arg3: int, arg4: float) -> None: ...

        def __init__(self, *args: Any, **kwargs: Any) -> None:
            """Initialize AIAction instance"""
            ...

        def is_valid(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: is_valid"""
            ...


    class AttackPlanner:
        """C++ class: AttackPlanner"""

        def __init__(self, arg0: Any) -> None:
            """Initialize AttackPlanner instance"""
            ...

        def determine_attack_cooldown(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: determine_attack_cooldown"""
            ...

        def determine_attack_count(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: determine_attack_count"""
            ...

        def plan_attacks(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: plan_attacks"""
            ...

        def set_seed(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: set_seed"""
            ...

        def should_attack(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: should_attack"""
            ...


    class GameState:
        """C++ class: GameState"""

        def __init__(self) -> None:
            """Initialize GameState instance"""
            ...

        def add_adjacency(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: add_adjacency"""
            ...

        def get_attackable_player_territories(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: get_attackable_player_territories"""
            ...

        def get_best_attacker_for_target(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: get_best_attacker_for_target"""
            ...

        def get_neighbors(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: get_neighbors"""
            ...

        def get_owner(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: get_owner"""
            ...

        def get_soldiers(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: get_soldiers"""
            ...

        def is_enemy_territory(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: is_enemy_territory"""
            ...

        def is_player_territory(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: is_player_territory"""
            ...

        def set_owner(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: set_owner"""
            ...

        def set_soldiers(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: set_soldiers"""
            ...

        def set_territory_count(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: set_territory_count"""
            ...


    class MCTSEngine:
        """C++ class: MCTSEngine"""

        def __init__(self, arg0: int) -> None:
            """Initialize MCTSEngine instance"""
            ...

        def get_best_action(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: get_best_action"""
            ...

        def get_top_actions(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: get_top_actions"""
            ...

        def predict_next_moves(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: predict_next_moves"""
            ...

        def set_exploration_constant(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: set_exploration_constant"""
            ...

        def set_max_depth(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: set_max_depth"""
            ...

        def set_seed(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: set_seed"""
            ...

        def set_simulation_count(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: set_simulation_count"""
            ...


    def action_to_vector(self, *args: Any, **kwargs: Any) -> Any:
        """C++ function: action_to_vector"""
        ...

    def create_game_state(self, *args: Any, **kwargs: Any) -> Any:
        """C++ function: create_game_state"""
        ...

    def vector_to_action(self, *args: Any, **kwargs: Any) -> Any:
        """C++ function: vector_to_action"""
        ...



class PathfindingModuleWrapper(Protocol):
    """Type hints for pathfinding module wrapper (VSCode autocomplete support)."""

    def getInfo(self) -> Dict[str, Any]:
        """Get pathfinding module information."""
        ...

    class MapPlacer:
        """C++ class: MapPlacer"""

        def __init__(self) -> None:
            """Initialize MapPlacer instance"""
            ...

        def generate_soldier_counts(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: generate_soldier_counts"""
            ...

        def get_enemy_base_placements(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: get_enemy_base_placements"""
            ...

        def get_player_start_territories(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: get_player_start_territories"""
            ...


    class NoiseGenerator:
        """C++ class: NoiseGenerator"""

        def __init__(self, arg0: Any) -> None:
            """Initialize NoiseGenerator instance"""
            ...

        def fractal_noise(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: fractal_noise"""
            ...

        def get_seed(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: get_seed"""
            ...

        def noise_2d(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: noise_2d"""
            ...

        def ridge_noise(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: ridge_noise"""
            ...

        def set_seed(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: set_seed"""
            ...


    class Point2D:
        """C++ class: Point2D"""

        @overload
        def __init__(self) -> None: ...
        @overload
        def __init__(self, arg0: float, arg1: float) -> None: ...

        def __init__(self, *args: Any, **kwargs: Any) -> None:
            """Initialize Point2D instance"""
            ...

        def cross(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: cross"""
            ...

        def distance(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: distance"""
            ...

        def distance_squared(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: distance_squared"""
            ...

        def dot(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: dot"""
            ...

        def length(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: length"""
            ...

        def normalized(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: normalized"""
            ...


    class TerritoryGraph:
        """C++ class: TerritoryGraph"""

        def __init__(self, arg0: int) -> None:
            """Initialize TerritoryGraph instance"""
            ...

        def add_edge(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: add_edge"""
            ...

        def are_adjacent(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: are_adjacent"""
            ...

        def are_connected(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: are_connected"""
            ...

        def find_path(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: find_path"""
            ...

        def get_attackable_territories(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: get_attackable_territories"""
            ...

        def get_border_territories(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: get_border_territories"""
            ...

        def get_distance(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: get_distance"""
            ...

        def get_neighbor_count(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: get_neighbor_count"""
            ...

        def get_neighbors(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: get_neighbors"""
            ...

        def get_reachable(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: get_reachable"""
            ...

        def get_weight(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: get_weight"""
            ...

        def set_weight(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: set_weight"""
            ...


    class VoronoiCell:
        """C++ class: VoronoiCell"""

        @overload
        def __init__(self) -> None: ...
        @overload
        def __init__(self, arg0: int, arg1: Any) -> None: ...

        def __init__(self, *args: Any, **kwargs: Any) -> None:
            """Initialize VoronoiCell instance"""
            ...

        def area(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: area"""
            ...

        def centroid(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: centroid"""
            ...

        def contains(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: contains"""
            ...

        def get_neighbor(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: get_neighbor"""
            ...

        def get_neighbor_count(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: get_neighbor_count"""
            ...

        def get_vertex(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: get_vertex"""
            ...

        def get_vertex_count(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: get_vertex_count"""
            ...


    class VoronoiGenerator:
        """C++ class: VoronoiGenerator"""

        def __init__(self, arg0: Any) -> None:
            """Initialize VoronoiGenerator instance"""
            ...

        def find_cell_at(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: find_cell_at"""
            ...

        def generate(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: generate"""
            ...

        def get_adjacency_pairs(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: get_adjacency_pairs"""
            ...

        def get_cell(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: get_cell"""
            ...

        def get_cell_count(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: get_cell_count"""
            ...

        def get_cells(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: get_cells"""
            ...

        def set_seed(self, *args: Any, **kwargs: Any) -> Any:
            """C++ method: set_seed"""
            ...




# CppApi with typed include() overloads for each module
class CppApi:
    """C++ API Manager with typed module loading.

    The include() method returns a module wrapper with full type hints
    for VSCode/PyCharm autocomplete support.
    """

    def __init__(self, project_root: Optional[str] = None, auto_update: bool = True) -> None:
        """Initialize CppApi.

        Args:
            project_root: Path to project root (default: auto-detect)
            auto_update: Whether to auto-rebuild on source changes
        """
        ...

    @overload
    def include(self, module_name: str = "combat_sim", auto_update: Optional[bool] = None) -> Combat_simModuleWrapper: ...

    @overload
    def include(self, module_name: str = "mcts_engine", auto_update: Optional[bool] = None) -> Mcts_engineModuleWrapper: ...

    @overload
    def include(self, module_name: str = "pathfinding", auto_update: Optional[bool] = None) -> PathfindingModuleWrapper: ...

    @overload
    def include(self, module_name: str, auto_update: Optional[bool] = None) -> Any: ...

    def include(self, module_name: str, auto_update: Optional[bool] = None) -> Any:
        """Load a C++ module.

        Args:
            module_name: Name of the module to load
            auto_update: Override auto-update setting for this module

        Returns:
            ModuleWrapper with access to C++ classes, functions, and structs
        """
        ...

    def rebuild(self, verbose: bool = False) -> bool:
        """Rebuild all C++ modules."""
        ...

    def list_modules(self) -> List[str]:
        """List available modules."""
        ...
