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

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

    class Lexer:
        """C++ class: Lexer"""

        def __init__(self, arg0: str) -> None:
            """Initialize Lexer instance"""
            ...

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


    class Token:
        """C++ class: Token"""

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

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

        pass

    class Interpreter:
        """C++ class: Interpreter"""

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

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

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


    class Value:
        """C++ class: Value"""

        @overload
        def __init__(self) -> None: ...
        @overload
        def __init__(self, arg0: bool) -> None: ...
        @overload
        def __init__(self, arg0: Any) -> None: ...
        @overload
        def __init__(self, arg0: float) -> None: ...
        @overload
        def __init__(self, arg0: str) -> None: ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



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

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