# Copyright (C) 2020-2022 HERE Global B.V. and its affiliate(s).
# All rights reserved.
#
# This software and other materials contain proprietary information
# controlled by HERE and are protected by applicable copyright legislation.
# Any use and utilization of this software and other materials and
# disclosure to any third parties is conditional upon having a separate
# agreement with HERE for the access, use, utilization or disclosure of this
# software. In the absence of such agreement, the use of the software is not
# allowed.

"""
A registry for lookup apis, so that they can be managed, cached, etc.
"""

from typing import Dict, Optional


class LookupApiRegistry:
    """HERE platform lookup api registry."""

    def __init__(self):
        """Instantiate HERE platform schema registry."""
        self._resource_registry = {}

    def register(self, catalog_hrn: str, resources_apis: dict):
        """Register a new resource lookup api for a given hrn."""
        self._resource_registry[catalog_hrn] = resources_apis

    def has_resources_apis(self, catalog_hrn: str) -> bool:
        """
        Check whether a given schema has already been registered.

        :param catalog_hrn: Catalog HRN
        :return: a bool flag indicating if schema is already registered.
        """
        result: bool = catalog_hrn in self._resource_registry
        return result

    def resources_apis(self, catalog_hrn: str) -> Optional[Dict]:
        """
        Return a schema by the provided schema HRN identifier.

        :param catalog_hrn: Catalog HRN
        :return: Schema instance for the given hrn.
        """
        if self.has_resources_apis(catalog_hrn):
            resource_registry: dict = self._resource_registry[catalog_hrn]
            return resource_registry
        else:
            return None
