/*
 * Copyright (C) 2025 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/**
 * DO NOT EDIT MANUALLY!!!
 *
 * Generated by tools/generate_annotation_enums.py.
 */

// clang-format off

#pragma once

#define addSupportedValues(EnumType) \
{ \
constexpr auto values = ndk::internal::enum_values<EnumType>; \
for (size_t i = 0; i < values.size(); i++) { \
    supportedValues.insert(static_cast<int64_t>(values[i])); \
} \
}

#include <VehicleHalTypes.h>
#include <aidl/android/hardware/automotive/vehicle/VehicleProperty.h>

#include <unordered_set>

namespace aidl::android::hardware::automotive::vehicle {
std::unordered_set<int64_t> getSupportedEnumValuesForProperty(VehicleProperty propertyId) {
    std::unordered_set<int64_t> supportedValues;
    switch (propertyId) {
        case VehicleProperty::INFO_FUEL_TYPE:
            addSupportedValues(FuelType)
            break;
        case VehicleProperty::INFO_EV_CONNECTOR_TYPE:
            addSupportedValues(EvConnectorType)
            break;
        case VehicleProperty::INFO_FUEL_DOOR_LOCATION:
            addSupportedValues(PortLocationType)
            break;
        case VehicleProperty::INFO_EV_PORT_LOCATION:
            addSupportedValues(PortLocationType)
            break;
        case VehicleProperty::INFO_DRIVER_SEAT:
            addSupportedValues(VehicleAreaSeat)
            break;
        case VehicleProperty::INFO_MULTI_EV_PORT_LOCATIONS:
            addSupportedValues(PortLocationType)
            break;
        case VehicleProperty::INFO_VEHICLE_SIZE_CLASS:
            addSupportedValues(VehicleSizeClass)
            break;
        case VehicleProperty::ENGINE_OIL_LEVEL:
            addSupportedValues(VehicleOilLevel)
            break;
        case VehicleProperty::IMPACT_DETECTED:
            addSupportedValues(ImpactSensorLocation)
            break;
        case VehicleProperty::GEAR_SELECTION:
            addSupportedValues(VehicleGear)
            break;
        case VehicleProperty::CURRENT_GEAR:
            addSupportedValues(VehicleGear)
            break;
        case VehicleProperty::TURN_SIGNAL_STATE:
            addSupportedValues(VehicleTurnSignal)
            break;
        case VehicleProperty::IGNITION_STATE:
            addSupportedValues(VehicleIgnitionState)
            break;
        case VehicleProperty::EV_STOPPING_MODE:
            addSupportedValues(EvStoppingMode)
            break;
        case VehicleProperty::ELECTRONIC_STABILITY_CONTROL_STATE:
            addSupportedValues(ElectronicStabilityControlState)
            addSupportedValues(ErrorState)
            break;
        case VehicleProperty::TURN_SIGNAL_LIGHT_STATE:
            addSupportedValues(VehicleTurnSignal)
            break;
        case VehicleProperty::TURN_SIGNAL_SWITCH:
            addSupportedValues(VehicleTurnSignal)
            break;
        case VehicleProperty::HVAC_FAN_DIRECTION:
            addSupportedValues(VehicleHvacFanDirection)
            break;
        case VehicleProperty::HVAC_TEMPERATURE_DISPLAY_UNITS:
            addSupportedValues(VehicleUnit)
            break;
        case VehicleProperty::HVAC_FAN_DIRECTION_AVAILABLE:
            addSupportedValues(VehicleHvacFanDirection)
            break;
        case VehicleProperty::DISTANCE_DISPLAY_UNITS:
            addSupportedValues(VehicleUnit)
            break;
        case VehicleProperty::FUEL_VOLUME_DISPLAY_UNITS:
            addSupportedValues(VehicleUnit)
            break;
        case VehicleProperty::TIRE_PRESSURE_DISPLAY_UNITS:
            addSupportedValues(VehicleUnit)
            break;
        case VehicleProperty::EV_BATTERY_DISPLAY_UNITS:
            addSupportedValues(VehicleUnit)
            break;
        case VehicleProperty::VEHICLE_SPEED_DISPLAY_UNITS:
            addSupportedValues(VehicleUnit)
            break;
        case VehicleProperty::HW_ROTARY_INPUT:
            addSupportedValues(RotaryInputType)
            break;
        case VehicleProperty::HW_CUSTOM_INPUT:
            addSupportedValues(CustomInputType)
            break;
        case VehicleProperty::SEAT_FOOTWELL_LIGHTS_STATE:
            addSupportedValues(VehicleLightState)
            break;
        case VehicleProperty::SEAT_FOOTWELL_LIGHTS_SWITCH:
            addSupportedValues(VehicleLightSwitch)
            break;
        case VehicleProperty::SEAT_AIRBAGS_DEPLOYED:
            addSupportedValues(VehicleAirbagLocation)
            break;
        case VehicleProperty::SEAT_OCCUPANCY:
            addSupportedValues(VehicleSeatOccupancyState)
            break;
        case VehicleProperty::WINDSHIELD_WIPERS_STATE:
            addSupportedValues(WindshieldWipersState)
            break;
        case VehicleProperty::WINDSHIELD_WIPERS_SWITCH:
            addSupportedValues(WindshieldWipersSwitch)
            break;
        case VehicleProperty::HEADLIGHTS_STATE:
            addSupportedValues(VehicleLightState)
            break;
        case VehicleProperty::HIGH_BEAM_LIGHTS_STATE:
            addSupportedValues(VehicleLightState)
            break;
        case VehicleProperty::FOG_LIGHTS_STATE:
            addSupportedValues(VehicleLightState)
            break;
        case VehicleProperty::HAZARD_LIGHTS_STATE:
            addSupportedValues(VehicleLightState)
            break;
        case VehicleProperty::HEADLIGHTS_SWITCH:
            addSupportedValues(VehicleLightSwitch)
            break;
        case VehicleProperty::HIGH_BEAM_LIGHTS_SWITCH:
            addSupportedValues(VehicleLightSwitch)
            break;
        case VehicleProperty::FOG_LIGHTS_SWITCH:
            addSupportedValues(VehicleLightSwitch)
            break;
        case VehicleProperty::HAZARD_LIGHTS_SWITCH:
            addSupportedValues(VehicleLightSwitch)
            break;
        case VehicleProperty::CABIN_LIGHTS_STATE:
            addSupportedValues(VehicleLightState)
            break;
        case VehicleProperty::CABIN_LIGHTS_SWITCH:
            addSupportedValues(VehicleLightSwitch)
            break;
        case VehicleProperty::READING_LIGHTS_STATE:
            addSupportedValues(VehicleLightState)
            break;
        case VehicleProperty::READING_LIGHTS_SWITCH:
            addSupportedValues(VehicleLightSwitch)
            break;
        case VehicleProperty::STEERING_WHEEL_LIGHTS_STATE:
            addSupportedValues(VehicleLightState)
            break;
        case VehicleProperty::STEERING_WHEEL_LIGHTS_SWITCH:
            addSupportedValues(VehicleLightSwitch)
            break;
        case VehicleProperty::ELECTRONIC_TOLL_COLLECTION_CARD_TYPE:
            addSupportedValues(ElectronicTollCollectionCardType)
            break;
        case VehicleProperty::ELECTRONIC_TOLL_COLLECTION_CARD_STATUS:
            addSupportedValues(ElectronicTollCollectionCardStatus)
            break;
        case VehicleProperty::FRONT_FOG_LIGHTS_STATE:
            addSupportedValues(VehicleLightState)
            break;
        case VehicleProperty::FRONT_FOG_LIGHTS_SWITCH:
            addSupportedValues(VehicleLightSwitch)
            break;
        case VehicleProperty::REAR_FOG_LIGHTS_STATE:
            addSupportedValues(VehicleLightState)
            break;
        case VehicleProperty::REAR_FOG_LIGHTS_SWITCH:
            addSupportedValues(VehicleLightSwitch)
            break;
        case VehicleProperty::EV_CHARGE_STATE:
            addSupportedValues(EvChargeState)
            break;
        case VehicleProperty::EV_REGENERATIVE_BRAKING_STATE:
            addSupportedValues(EvRegenerativeBrakingState)
            break;
        case VehicleProperty::TRAILER_PRESENT:
            addSupportedValues(TrailerState)
            break;
        case VehicleProperty::GENERAL_SAFETY_REGULATION_COMPLIANCE_REQUIREMENT:
            addSupportedValues(GsrComplianceRequirementType)
            break;
        case VehicleProperty::SHUTDOWN_REQUEST:
            addSupportedValues(VehicleApPowerStateShutdownParam)
            break;
        case VehicleProperty::VEHICLE_DRIVING_AUTOMATION_CURRENT_LEVEL:
            addSupportedValues(VehicleAutonomousState)
            break;
        case VehicleProperty::VEHICLE_DRIVING_AUTOMATION_TARGET_LEVEL:
            addSupportedValues(VehicleAutonomousState)
            break;
        case VehicleProperty::CAMERA_SERVICE_CURRENT_STATE:
            addSupportedValues(CameraServiceState)
            break;
        case VehicleProperty::AUTOMATIC_EMERGENCY_BRAKING_STATE:
            addSupportedValues(AutomaticEmergencyBrakingState)
            addSupportedValues(ErrorState)
            break;
        case VehicleProperty::FORWARD_COLLISION_WARNING_STATE:
            addSupportedValues(ForwardCollisionWarningState)
            addSupportedValues(ErrorState)
            break;
        case VehicleProperty::BLIND_SPOT_WARNING_STATE:
            addSupportedValues(BlindSpotWarningState)
            addSupportedValues(ErrorState)
            break;
        case VehicleProperty::LANE_DEPARTURE_WARNING_STATE:
            addSupportedValues(LaneDepartureWarningState)
            addSupportedValues(ErrorState)
            break;
        case VehicleProperty::LANE_KEEP_ASSIST_STATE:
            addSupportedValues(LaneKeepAssistState)
            addSupportedValues(ErrorState)
            break;
        case VehicleProperty::LANE_CENTERING_ASSIST_COMMAND:
            addSupportedValues(LaneCenteringAssistCommand)
            break;
        case VehicleProperty::LANE_CENTERING_ASSIST_STATE:
            addSupportedValues(LaneCenteringAssistState)
            addSupportedValues(ErrorState)
            break;
        case VehicleProperty::EMERGENCY_LANE_KEEP_ASSIST_STATE:
            addSupportedValues(EmergencyLaneKeepAssistState)
            addSupportedValues(ErrorState)
            break;
        case VehicleProperty::CRUISE_CONTROL_TYPE:
            addSupportedValues(CruiseControlType)
            addSupportedValues(ErrorState)
            break;
        case VehicleProperty::CRUISE_CONTROL_STATE:
            addSupportedValues(CruiseControlState)
            addSupportedValues(ErrorState)
            break;
        case VehicleProperty::CRUISE_CONTROL_COMMAND:
            addSupportedValues(CruiseControlCommand)
            break;
        case VehicleProperty::HANDS_ON_DETECTION_DRIVER_STATE:
            addSupportedValues(HandsOnDetectionDriverState)
            addSupportedValues(ErrorState)
            break;
        case VehicleProperty::HANDS_ON_DETECTION_WARNING:
            addSupportedValues(HandsOnDetectionWarning)
            addSupportedValues(ErrorState)
            break;
        case VehicleProperty::DRIVER_DROWSINESS_ATTENTION_STATE:
            addSupportedValues(DriverDrowsinessAttentionState)
            addSupportedValues(ErrorState)
            break;
        case VehicleProperty::DRIVER_DROWSINESS_ATTENTION_WARNING:
            addSupportedValues(DriverDrowsinessAttentionWarning)
            addSupportedValues(ErrorState)
            break;
        case VehicleProperty::DRIVER_DISTRACTION_STATE:
            addSupportedValues(DriverDistractionState)
            addSupportedValues(ErrorState)
            break;
        case VehicleProperty::DRIVER_DISTRACTION_WARNING:
            addSupportedValues(DriverDistractionWarning)
            addSupportedValues(ErrorState)
            break;
        case VehicleProperty::LOW_SPEED_COLLISION_WARNING_STATE:
            addSupportedValues(LowSpeedCollisionWarningState)
            addSupportedValues(ErrorState)
            break;
        case VehicleProperty::CROSS_TRAFFIC_MONITORING_WARNING_STATE:
            addSupportedValues(CrossTrafficMonitoringWarningState)
            addSupportedValues(ErrorState)
            break;
        case VehicleProperty::LOW_SPEED_AUTOMATIC_EMERGENCY_BRAKING_STATE:
            addSupportedValues(LowSpeedAutomaticEmergencyBrakingState)
            addSupportedValues(ErrorState)
            break;

        default:
            // Do nothing.
            break;
    }
    return supportedValues;
}
}  // aidl::android::hardware::automotive::vehicle
