"""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 Fast_listModuleWrapper(Protocol):
    """Type hints for fast_list module wrapper (VSCode autocomplete support)."""

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

    class FastList:
        """C++ class: FastList"""

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

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

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

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

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


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

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

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

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

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



class Game_mathModuleWrapper(Protocol):
    """Type hints for game_math module wrapper (VSCode autocomplete support)."""

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

    class Vector2D:
        """C++ class: Vector2D"""

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

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

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

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

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

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


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

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

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

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



class Solar_systemModuleWrapper(Protocol):
    """Type hints for solar_system module wrapper (VSCode autocomplete support)."""

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

    class CelestialBody:
        """C++ class: CelestialBody"""

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

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


    class SolarSystem:
        """C++ class: SolarSystem"""

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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



class TemplatesModuleWrapper(Protocol):
    """Type hints for templates module wrapper (VSCode autocomplete support)."""

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

    class Pointf:
        """C++ class: Pointf"""

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

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

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


    class Pointi:
        """C++ class: Pointi"""

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

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

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


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

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



# 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 = "fast_list", auto_update: Optional[bool] = None) -> Fast_listModuleWrapper: ...

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

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

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

    @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."""
        ...
