# Copyright (C) 2021-2025 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 Topology Attributes.
"""
from typing import List, Mapping

from here.content.content import hmc_schema_version  # noqa: F401
from here.content.hmc2.base_attributes import Attribute, BaseAttributesBinding


class TopologyAttributes(BaseAttributesBinding):
    """
    Bindings for the HMC Topology 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:topology-attributes_v2:2.166.2"  # noqa: F541
        ]  # {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,
            "accessible_by": Attribute,
            "black_spot": Attribute,
            "construction_status": Attribute,
            "display_level": Attribute,
            "environmental_zone_condition": Attribute,
            "functional_class": Attribute,
            "gate": Attribute,
            "grade_category": Attribute,
            "intersection_category": Attribute,
            "iso_country_code": Attribute,
            "junction_divider": Attribute,
            "lane_category": Attribute,
            "local_road": Attribute,
            "low_mobility": Attribute,
            "low_speed_zone": Attribute,
            "motorcycle_restriction": Attribute,
            "overpass_underpass": Attribute,
            "overtaking_restriction": Attribute,
            "permitted_driving_manoeuvre": Attribute,
            "physical": Attribute,
            "physical_lane_count": Attribute,
            "political_view_action": Attribute,
            "protected_overtaking": Attribute,
            "railway_crossing": Attribute,
            "recreational_vehicle_restriction": Attribute,
            "restricted_driving_manoeuvre": Attribute,
            "road_class": Attribute,
            "road_divider": Attribute,
            "road_usage": Attribute,
            "scenic": Attribute,
            "short_construction_warning": Attribute,
            "special_explication": Attribute,
            "special_speed_situation": Attribute,
            "special_traffic_area_category": Attribute,
            "speed_category": Attribute,
            "speed_limit": Attribute,
            "supplemental_geometry": Attribute,
            "through_lane_count": Attribute,
            "through_route": Attribute,
            "toll_structure": Attribute,
            "traffic_message_channel_code": Attribute,
            "traffic_sign": Attribute,
            "traffic_signal": Attribute,
            "transport_protocol_expert_group": Attribute,
            "travel_direction": Attribute,
            "urban": Attribute,
            "usage_fee_required": Attribute,
            "variable_speed_limit": Attribute,
            "variable_speed_sign": Attribute,
            "vehicle_checkpoint": Attribute,
        }
