from office365.directory.identities.api_connector import IdentityApiConnector
from office365.directory.identities.conditional_access_root import ConditionalAccessRoot
from office365.directory.identities.userflows.attribute import IdentityUserFlowAttribute
from office365.directory.identities.userflows.b2x.user_flow import B2XIdentityUserFlow
from office365.directory.identities.providers.identity_provider_base import IdentityProviderBase
from office365.entity import Entity
from office365.entity_collection import EntityCollection
from office365.runtime.resource_path import ResourcePath


class IdentityContainer(Entity):
    """
    Represents the entry point to different features in External Identities for
    both Azure Active Directory (Azure AD) and Azure AD B2C tenants.
    """

    @property
    def api_connectors(self):
        """
        Represents entry point for API connectors.
        """
        return self.properties.get('apiConnectors',
                                   EntityCollection(self.context, IdentityApiConnector,
                                                    ResourcePath("apiConnectors", self.resource_path)))

    @property
    def conditional_access(self):
        """The entry point for the Conditional Access (CA) object model."""
        return self.properties.get('conditionalAccess',
                                   ConditionalAccessRoot(self.context,
                                                         ResourcePath("conditionalAccess", self.resource_path)))

    @property
    def identity_providers(self):
        """Represents entry point for identity provider base."""
        return self.properties.get('identityProviders',
                                   EntityCollection(self.context, IdentityProviderBase,
                                                    ResourcePath("identityProviders", self.resource_path)))

    @property
    def b2x_user_flows(self):
        """
        Represents entry point for B2X/self-service sign-up identity userflows.
        """
        return self.properties.get('b2xUserFlows',
                                   EntityCollection(self.context, B2XIdentityUserFlow,
                                                    ResourcePath("b2xUserFlows", self.resource_path)))

    @property
    def user_flow_attributes(self):
        """
        Represents entry point for identity userflow attributes.
        """
        return self.properties.get('userFlowAttributes',
                                   EntityCollection(self.context, IdentityUserFlowAttribute,
                                                    ResourcePath("userFlowAttributes", self.resource_path)))

    def get_property(self, name, default_value=None):
        if default_value is None:
            property_mapping = {
                "apiConnectors": self.api_connectors,
                "b2xUserFlows": self.b2x_user_flows,
                "conditionalAccess": self.conditional_access,
                "identityProviders": self.identity_providers,
                "userFlowAttributes": self.user_flow_attributes
            }
            default_value = property_mapping.get(name, None)
        return super(IdentityContainer, self).get_property(name, default_value)

from office365.directory.identities.api_connector import IdentityApiConnector
from office365.directory.identities.conditional_access_root import ConditionalAccessRoot
from office365.directory.identities.userflows.attribute import IdentityUserFlowAttribute
from office365.directory.identities.userflows.b2x.user_flow import B2XIdentityUserFlow
from office365.directory.identities.providers.identity_provider_base import IdentityProviderBase
from office365.entity import Entity
from office365.entity_collection import EntityCollection
from office365.runtime.resource_path import ResourcePath


class IdentityContainer(Entity):
    """
    Represents the entry point to different features in External Identities for
    both Azure Active Directory (Azure AD) and Azure AD B2C tenants.
    """

    @property
    def api_connectors(self):
        """
        Represents entry point for API connectors.
        """
        return self.properties.get('apiConnectors',
                                   EntityCollection(self.context, IdentityApiConnector,
                                                    ResourcePath("apiConnectors", self.resource_path)))

    @property
    def conditional_access(self):
        """The entry point for the Conditional Access (CA) object model."""
        return self.properties.get('conditionalAccess',
                                   ConditionalAccessRoot(self.context,
                                                         ResourcePath("conditionalAccess", self.resource_path)))

    @property
    def identity_providers(self):
        """Represents entry point for identity provider base."""
        return self.properties.get('identityProviders',
                                   EntityCollection(self.context, IdentityProviderBase,
                                                    ResourcePath("identityProviders", self.resource_path)))

    @property
    def b2x_user_flows(self):
        """
        Represents entry point for B2X/self-service sign-up identity userflows.
        """
        return self.properties.get('b2xUserFlows',
                                   EntityCollection(self.context, B2XIdentityUserFlow,
                                                    ResourcePath("b2xUserFlows", self.resource_path)))

    @property
    def user_flow_attributes(self):
        """
        Represents entry point for identity userflow attributes.
        """
        return self.properties.get('userFlowAttributes',
                                   EntityCollection(self.context, IdentityUserFlowAttribute,
                                                    ResourcePath("userFlowAttributes", self.resource_path)))

    def get_property(self, name, default_value=None):
        if default_value is None:
            property_mapping = {
                "apiConnectors": self.api_connectors,
                "b2xUserFlows": self.b2x_user_flows,
                "conditionalAccess": self.conditional_access,
                "identityProviders": self.identity_providers,
                "userFlowAttributes": self.user_flow_attributes
            }
            default_value = property_mapping.get(name, None)
        return super(IdentityContainer, self).get_property(name, default_value)

Represents the entry point to different features in External Identities for     both Azure Active Directory (Azure AD) and Azure AD B2C tenants. Represents entry point for API connectors. The entry point for the Conditional Access (CA) object model. Represents entry point for identity provider base. Represents entry point for B2X/self-service sign-up identity userflows. Represents entry point for identity userflow attributes.