try:
    from explorer.discovery.report_manager import DiscoveryReportManager

    from explorer.gateway.client import GatewayClient

    from explorer.api.project import ProjectAPI
    from explorer.api.workspace import WorkspaceAPI
    from explorer.api.search import SearchAPI
    from explorer.api.discovery import DiscoveryAPI

except ImportError:
    from discovery.report_manager import DiscoveryReportManager

    from gateway.client import GatewayClient

    from api.project import ProjectAPI
    from api.workspace import WorkspaceAPI
    from api.search import SearchAPI
    from api.discovery import DiscoveryAPI


import os



class ExplorerContext:

    import os


    def __init__(
        self,
        gateway_url=None,
        explorer_root=None
    ):

        if gateway_url is None:
            gateway_url = os.environ.get(
                "EXPLORER_GATEWAY_URL",
                "https://manyfest.co.in/explorer/gateway/api"
            )

        self.discovery = DiscoveryReportManager()

        self.gateway = GatewayClient(gateway_url)

        self.project = ProjectAPI(self)
        self.workspace = WorkspaceAPI(self)
        self.search = SearchAPI(self)
        self.discovery_api = DiscoveryAPI(self)

        self.active_workspace = None
        self.explorer_root = explorer_root

    def use_workspace(self, alias):

        self.active_workspace = alias

        return self.workspace.get(alias)
    
    def load_project(self, project_root):

        self.project_root = project_root

        if self.explorer_root is None:
            raise RuntimeError(
                "Explorer root has not been configured."
            )

        return self.discovery.load(
            self.explorer_root
        )
    

    @property
    def reports(self):
        return self.discovery.reports
    @property
    def workspace_alias(self):
        return self.active_workspace