# Copyright (C) 2021-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.

"""
Bindings for the HMC Navigation Attributes.
"""
from typing import List, Mapping

from here.content.content import hmc_schema_version
from here.content.hmc2.base_attributes import Attribute, BaseAttributesBinding


class NavigationAttributes(BaseAttributesBinding):
    """
    Bindings for the HMC Navigation Attributes.
    """

    @classmethod
    def schema_hrn(cls) -> List[str]:
        """
        :return: the HRN of schema this binding can parse and index
        """
        return [
            f"hrn:here:schema:::com.here.schema.rib:navigation-attributes_v2:{hmc_schema_version}"
        ]

    @classmethod
    def object_types(cls) -> Mapping[str, type]:
        """
        :return: the types of attributes supported by this binding
        """

        return {
            "access_permission": Attribute,
            "access_restriction": Attribute,
            "construction_status": Attribute,
            "gate": Attribute,
            "intersection_category": Attribute,
            "lane_category": Attribute,
            "through_lane_count": Attribute,
            "physical_lane_count": Attribute,
            "local_road": Attribute,
            "low_mobility": Attribute,
            "permitted_driving_manoeuvre": Attribute,
            "restricted_driving_manoeuvre": Attribute,
            "road_divider": Attribute,
            "road_usage": Attribute,
            "short_construction_warning": Attribute,
            "special_explication": Attribute,
            "speed_category": Attribute,
            "speed_limit": Attribute,
            "supplemental_geometry": Attribute,
            "through_route": Attribute,
            "toll_structure": Attribute,
            "traffic_message_channel_code": Attribute,
            "transport_protocol_expert_group": Attribute,
            "travel_direction": Attribute,
            "urban": Attribute,
            "usage_fee_required": Attribute,
            "environmental_zone_condition": Attribute,
            "junction_divider": Attribute,
        }
