from __future__ import annotations
from collections.abc import Callable
from kiota_abstractions.api_client_builder import enable_backing_store_for_serialization_writer_factory, register_default_deserializer, register_default_serializer
from kiota_abstractions.base_request_builder import BaseRequestBuilder
from kiota_abstractions.get_path_parameters import get_path_parameters
from kiota_abstractions.request_adapter import RequestAdapter
from kiota_abstractions.serialization import ParseNodeFactoryRegistry, SerializationWriterFactoryRegistry
from kiota_serialization_form.form_parse_node_factory import FormParseNodeFactory
from kiota_serialization_form.form_serialization_writer_factory import FormSerializationWriterFactory
from kiota_serialization_json.json_parse_node_factory import JsonParseNodeFactory
from kiota_serialization_json.json_serialization_writer_factory import JsonSerializationWriterFactory
from kiota_serialization_multipart.multipart_serialization_writer_factory import MultipartSerializationWriterFactory
from kiota_serialization_text.text_parse_node_factory import TextParseNodeFactory
from kiota_serialization_text.text_serialization_writer_factory import TextSerializationWriterFactory
from typing import Any, Optional, TYPE_CHECKING, Union

if TYPE_CHECKING:
    from .bim360.bim360_request_builder import Bim360RequestBuilder
    from .construction.construction_request_builder import ConstructionRequestBuilder
    from .cost.cost_request_builder import CostRequestBuilder
    from .data_connector.data_connector_request_builder import DataConnectorRequestBuilder
    from .hq.hq_request_builder import HqRequestBuilder

class BaseACCclient(BaseRequestBuilder):
    """
    The main entry point of the SDK, exposes the configuration and the fluent API.
    """
    def __init__(self,request_adapter: RequestAdapter) -> None:
        """
        Instantiates a new BaseACCclient and sets the default values.
        param request_adapter: The request adapter to use to execute the requests.
        Returns: None
        """
        if request_adapter is None:
            raise TypeError("request_adapter cannot be null.")
        super().__init__(request_adapter, "{+baseurl}", None)
        register_default_serializer(JsonSerializationWriterFactory)
        register_default_serializer(TextSerializationWriterFactory)
        register_default_serializer(FormSerializationWriterFactory)
        register_default_serializer(MultipartSerializationWriterFactory)
        register_default_deserializer(JsonParseNodeFactory)
        register_default_deserializer(TextParseNodeFactory)
        register_default_deserializer(FormParseNodeFactory)
        if not self.request_adapter.base_url:
            self.request_adapter.base_url = "https://developer.api.autodesk.com"
        self.path_parameters["base_url"] = self.request_adapter.base_url
    
    @property
    def bim360(self) -> Bim360RequestBuilder:
        """
        The bim360 property
        """
        from .bim360.bim360_request_builder import Bim360RequestBuilder

        return Bim360RequestBuilder(self.request_adapter, self.path_parameters)
    
    @property
    def construction(self) -> ConstructionRequestBuilder:
        """
        The construction property
        """
        from .construction.construction_request_builder import ConstructionRequestBuilder

        return ConstructionRequestBuilder(self.request_adapter, self.path_parameters)
    
    @property
    def cost(self) -> CostRequestBuilder:
        """
        The cost property
        """
        from .cost.cost_request_builder import CostRequestBuilder

        return CostRequestBuilder(self.request_adapter, self.path_parameters)
    
    @property
    def data_connector(self) -> DataConnectorRequestBuilder:
        """
        The dataConnector property
        """
        from .data_connector.data_connector_request_builder import DataConnectorRequestBuilder

        return DataConnectorRequestBuilder(self.request_adapter, self.path_parameters)
    
    @property
    def hq(self) -> HqRequestBuilder:
        """
        The hq property
        """
        from .hq.hq_request_builder import HqRequestBuilder

        return HqRequestBuilder(self.request_adapter, self.path_parameters)
    

