from enum import IntEnum
from typing import overload, NewType, Optional, Tuple

from OCC.Core.Standard import *
from OCC.Core.NCollection import *
from OCC.Core.TCollection import *
from OCC.Core.TColStd import *
from OCC.Core.TDocStd import *
from OCC.Core.XSControl import *
from OCC.Core.Message import *
from OCC.Core.TopoDS import *

# the following typedef cannot be wrapped as is
DE_ConfigurationVendorMap = NewType("DE_ConfigurationVendorMap", Any)

class DE_ConfigurationContext(Standard_Transient):
    def __init__(self) -> None: ...
    def BooleanVal(self, theParam: str, theDefValue: bool, theScope: Optional[str] = "") -> bool: ...
    def GetBoolean(self, theParam: str, theScope: Optional[str] = "") -> Tuple[bool, bool]: ...
    def GetInteger(self, theParam: str, theScope: Optional[str] = "") -> Tuple[bool, int]: ...
    def GetInternalMap(self) -> DE_ResourceMap: ...
    def GetReal(self, theParam: str, theScope: Optional[str] = "") -> Tuple[bool, float]: ...
    def GetString(self, theParam: str, theValue: str, theScope: Optional[str] = "") -> bool: ...
    def GetStringSeq(self, theParam: str, theValue: TColStd_ListOfAsciiString, theScope: Optional[str] = "") -> bool: ...
    def IntegerVal(self, theParam: str, theDefValue: int, theScope: Optional[str] = "") -> int: ...
    def IsParamSet(self, theParam: str, theScope: Optional[str] = "") -> bool: ...
    def Load(self, theConfiguration: str) -> bool: ...
    def LoadFile(self, theFile: str) -> bool: ...
    def LoadStr(self, theResource: str) -> bool: ...
    def RealVal(self, theParam: str, theDefValue: float, theScope: Optional[str] = "") -> float: ...
    def StringVal(self, theParam: str, theDefValue: str, theScope: Optional[str] = "") -> str: ...

class DE_ConfigurationNode(Standard_Transient):
    def BuildProvider(self) -> DE_Provider: ...
    def CheckContent(self, theBuffer: NCollection_Buffer) -> bool: ...
    def CheckExtension(self, theExtension: str) -> bool: ...
    def Copy(self) -> DE_ConfigurationNode: ...
    def GetExtensions(self) -> TColStd_ListOfAsciiString: ...
    def GetFormat(self) -> str: ...
    def GetVendor(self) -> str: ...
    def IsEnabled(self) -> bool: ...
    def IsExportSupported(self) -> bool: ...
    def IsImportSupported(self) -> bool: ...
    @overload
    def Load(self, theResourcePath: Optional[str] = "") -> bool: ...
    @overload
    def Load(self, theResource: DE_ConfigurationContext) -> bool: ...
    @overload
    def Save(self, theResourcePath: str) -> bool: ...
    @overload
    def Save(self) -> str: ...
    def SetEnabled(self, theIsLoaded: bool) -> None: ...
    def UpdateLoad(self, theToImport: bool, theToKeep: bool) -> bool: ...

class DE_Provider(Standard_Transient):
    def GetFormat(self) -> str: ...
    def GetNode(self) -> DE_ConfigurationNode: ...
    def GetVendor(self) -> str: ...
    @overload
    def Read(self, thePath: str, theDocument: TDocStd_Document, theWS: XSControl_WorkSession, theProgress: Optional[Message_ProgressRange] = Message_ProgressRange()) -> bool: ...
    @overload
    def Read(self, thePath: str, theDocument: TDocStd_Document, theProgress: Optional[Message_ProgressRange] = Message_ProgressRange()) -> bool: ...
    @overload
    def Read(self, thePath: str, theShape: TopoDS_Shape, theWS: XSControl_WorkSession, theProgress: Optional[Message_ProgressRange] = Message_ProgressRange()) -> bool: ...
    @overload
    def Read(self, thePath: str, theShape: TopoDS_Shape, theProgress: Optional[Message_ProgressRange] = Message_ProgressRange()) -> bool: ...
    def SetNode(self, theNode: DE_ConfigurationNode) -> None: ...
    @overload
    def Write(self, thePath: str, theDocument: TDocStd_Document, theWS: XSControl_WorkSession, theProgress: Optional[Message_ProgressRange] = Message_ProgressRange()) -> bool: ...
    @overload
    def Write(self, thePath: str, theDocument: TDocStd_Document, theProgress: Optional[Message_ProgressRange] = Message_ProgressRange()) -> bool: ...
    @overload
    def Write(self, thePath: str, theShape: TopoDS_Shape, theWS: XSControl_WorkSession, theProgress: Optional[Message_ProgressRange] = Message_ProgressRange()) -> bool: ...
    @overload
    def Write(self, thePath: str, theShape: TopoDS_Shape, theProgress: Optional[Message_ProgressRange] = Message_ProgressRange()) -> bool: ...

class DE_Wrapper(Standard_Transient):
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self, theWrapper: DE_Wrapper) -> None: ...
    def Bind(self, theNode: DE_ConfigurationNode) -> bool: ...
    @overload
    def ChangePriority(self, theFormat: str, theVendorPriority: TColStd_ListOfAsciiString, theToDisable: Optional[bool] = False) -> None: ...
    @overload
    def ChangePriority(self, theVendorPriority: TColStd_ListOfAsciiString, theToDisable: Optional[bool] = False) -> None: ...
    def Copy(self) -> DE_Wrapper: ...
    def Find(self, theFormat: str, theVendor: str, theNode: DE_ConfigurationNode) -> bool: ...
    def FindProvider(self, thePath: str, theToImport: bool, theProvider: DE_Provider) -> bool: ...
    @staticmethod
    def GlobalLoadMutex() -> Standard_Mutex: ...
    @staticmethod
    def GlobalWrapper() -> DE_Wrapper: ...
    def KeepUpdates(self) -> bool: ...
    @overload
    def Load(self, theResource: Optional[str] = "", theIsRecursive: Optional[bool] = True) -> bool: ...
    @overload
    def Load(self, theResource: DE_ConfigurationContext, theIsRecursive: Optional[bool] = True) -> bool: ...
    def Nodes(self) -> DE_ConfigurationFormatMap: ...
    @overload
    def Read(self, thePath: str, theDocument: TDocStd_Document, theWS: XSControl_WorkSession, theProgress: Optional[Message_ProgressRange] = Message_ProgressRange()) -> bool: ...
    @overload
    def Read(self, thePath: str, theDocument: TDocStd_Document, theProgress: Optional[Message_ProgressRange] = Message_ProgressRange()) -> bool: ...
    @overload
    def Read(self, thePath: str, theShape: TopoDS_Shape, theWS: XSControl_WorkSession, theProgress: Optional[Message_ProgressRange] = Message_ProgressRange()) -> bool: ...
    @overload
    def Read(self, thePath: str, theShape: TopoDS_Shape, theProgress: Optional[Message_ProgressRange] = Message_ProgressRange()) -> bool: ...
    @overload
    def Save(self, theResourcePath: str, theIsRecursive: Optional[bool] = True, theFormats: Optional[TColStd_ListOfAsciiString] = TColStd_ListOfAsciiString(), theVendors: Optional[TColStd_ListOfAsciiString] = TColStd_ListOfAsciiString()) -> bool: ...
    @overload
    def Save(self, theIsRecursive: Optional[bool] = True, theFormats: Optional[TColStd_ListOfAsciiString] = TColStd_ListOfAsciiString(), theVendors: Optional[TColStd_ListOfAsciiString] = TColStd_ListOfAsciiString()) -> str: ...
    @staticmethod
    def SetGlobalWrapper(theWrapper: DE_Wrapper) -> None: ...
    def SetKeepUpdates(self, theToKeepUpdates: bool) -> None: ...
    def UnBind(self, theNode: DE_ConfigurationNode) -> bool: ...
    def UpdateLoad(self, theToForceUpdate: Optional[bool] = False) -> None: ...
    @overload
    def Write(self, thePath: str, theDocument: TDocStd_Document, theWS: XSControl_WorkSession, theProgress: Optional[Message_ProgressRange] = Message_ProgressRange()) -> bool: ...
    @overload
    def Write(self, thePath: str, theDocument: TDocStd_Document, theProgress: Optional[Message_ProgressRange] = Message_ProgressRange()) -> bool: ...
    @overload
    def Write(self, thePath: str, theShape: TopoDS_Shape, theWS: XSControl_WorkSession, theProgress: Optional[Message_ProgressRange] = Message_ProgressRange()) -> bool: ...
    @overload
    def Write(self, thePath: str, theShape: TopoDS_Shape, theProgress: Optional[Message_ProgressRange] = Message_ProgressRange()) -> bool: ...

#classnotwrapped
class DE_PluginHolder: ...

#classnotwrapped
class DE_ShapeFixConfigurationNode: ...

#classnotwrapped
class DE_ShapeFixParameters: ...

# harray1 classes
# harray2 classes
# hsequence classes

