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

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

    class CryptoUtils:
        """C++ class: CryptoUtils"""

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

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

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

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

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

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

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

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

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

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

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

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

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


    class HDFileHeader:
        """C++ class: HDFileHeader"""

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

        pass

    class StepCompiler:
        """C++ class: StepCompiler"""

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

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

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

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

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

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

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

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

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




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

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