from .Autocad.AcadEntity import *
from .Autocad.AcadObject import *
from .Autocad.Entities import *
from .Autocad.Objects import *
from .Types import *
from .Autocad.Proxy import *
from abc import ABC, abstractmethod

class AutoCAD(AcadApplication):
    def __init__(self) -> None: ...
    def uGetAcadAcCmColor(self) -> AcadAcCmColor: ...
    def uGetAcadLayerStateManager(self) -> AcadLayerStateManager: ...
    def uGetAcadSecurityParams(self) -> AcadSecurityParams: ...
    def uSetXData(obj: AcadObject, xdm: XDataManager) -> None: ...
    def uGetObjectType(self, obj: AcadObject) -> type | None: ...

class BlockReference(ABC):
    def __init__(self, acad_block_reference:AcadBlockReference = None) -> None: ...
    @staticmethod
    def _get_block_attributes(block_ref:AcadBlockReference) -> list[AcadAttributeReference]: ...
    @staticmethod
    def _get_block_dynamic_properties(block_ref:AcadBlockReference) -> list[AcadDynamicBlockReferenceProperty]: ...
    @classmethod
    def get_list(cls, space: AcadModelSpace | AcadPaperSpace): ...
    @property
    @abstractmethod
    def BlockName(self) -> str: ...
    def insert(self, insertion_point:PyGePoint3d, space: AcadModelSpace | AcadPaperSpace | AcadBlock): ...
    def attribute(self, tag_name: str) -> AcadAttributeReference: ...
    def dynamic_property(self, dyn_name: str) -> AcadDynamicBlockReferenceProperty: ...
    def get_attribute_value(self, tag_name) -> str: ...
    def set_attribute_value(self, tag_name, value): ...
    def get_dynamic_property_value(self, dyn_name:str) -> Variant: ...
    def set_dynamic_property_value(self, dyn_name, value): ...