// Copyright 2023 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

use std::collections::HashMap;

use super::{AssignedUuid, Uuid};

#[rustfmt::skip]
// Generated with a magic regexp: %s/ - uuid: \(......\)\n   name: \(.\+\)\n   id: \(.\+\)\n/(\1, "\2", "\3"),\r/g

#[rustfmt::skip]
lazy_static! {
    pub static ref SERVICE_CLASS_UUIDS: HashMap<Uuid, AssignedUuid> = assigned_uuid_map!(
        (0x1000, "ServiceDiscoveryServerServiceClassID", "org.bluetooth.service_class.service_discovery_server"),
        (0x1001, "BrowseGroupDescriptorServiceClassID", "org.bluetooth.service_class.browse_group_descriptor"),
        (0x1101, "SerialPort", "org.bluetooth.profile.serial_port"),
        (0x1102, "LANAccessUsingPPP", "org.bluetooth.profile.lan_access"),
        (0x1103, "DialupNetworking", "org.bluetooth.profile.dial_up_networking"),
        (0x1104, "IrMCSync", "org.bluetooth.profile.synchronization_profile"),
        (0x1105, "OBEXObjectPush", "org.bluetooth.profile.object_push"),
        (0x1106, "OBEXFileTransfer", "org.bluetooth.profile.file_transfer_profile"),
        (0x1107, "IrMCSyncCommand", "org.bluetooth.profile.synchronization_command"),
        (0x1108, "Headset", "org.bluetooth.profile.headset"),
        (0x1109, "CordlessTelephony", "org.bluetooth.profile.cordless_telephony"),
        (0x110A, "AudioSource", "org.bluetooth.profile.a2dp_audio_source"),
        (0x110B, "AudioSink", "org.bluetooth.profile.a2dp_audio_sink"),
        (0x110C, "A/V_RemoteControlTarget", "org.bluetooth.profile.avrcp_remote_control_target"),
        (0x110D, "AdvancedAudioDistribution", "org.bluetooth.profile.a2dp"),
        (0x110E, "A/V_RemoteControl", "org.bluetooth.profile.avrcp_remote_control_remote_control"),
        (0x110F, "A/V_RemoteControlController", "org.bluetooth.profile.avrcp_remote_control_remote_control_controller"),
        (0x1110, "Intercom", "org.bluetooth.profile.intercom"),
        (0x1111, "Fax", "org.bluetooth.profile.fax"),
        (0x1112, "Headset - Audio Gateway", "org.bluetooth.profile.headset_audio_gateway"),
        (0x1113, "WAP", "org.bluetooth.profile.wap"),
        (0x1114, "WAP_CLIENT", "org.bluetooth.profile.wap_client"),
        (0x1115, "PANU", "org.bluetooth.profile.pan_user"),
        (0x1116, "NAP", "org.bluetooth.profile.pan_network_access_point"),
        (0x1117, "GN", "org.bluetooth.profile.pan_gn"),
        (0x1118, "DirectPrinting", "org.bluetooth.profile.bpp_direct_printing"),
        (0x1119, "ReferencePrinting", "org.bluetooth.profile.bpp_reference_printing"),
        (0x111A, "Basic Imaging Profile", "org.bluetooth.profile.bip"),
        (0x111B, "ImagingResponder", "org.bluetooth.profile.bip_imaging_responder"),
        (0x111C, "ImagingAutomaticArchive", "org.bluetooth.profile.bip_imaging_automatic_archive"),
        (0x111D, "ImagingReferencedObjects", "org.bluetooth.profile.bip_imaging_referenced_objects"),
        (0x111E, "Handsfree", "org.bluetooth.profile.handsfree"),
        (0x111F, "HandsfreeAudioGateway", "org.bluetooth.service_class.handsfree_audio_gateway"),
        (0x1120, "DirectPrintingReferenceObjectsService", "org.bluetooth.service_class.bpp_direct_printing_reference_objects"),
        (0x1121, "ReflectedUI", "org.bluetooth.service_class.bpp_reflected_ui"),
        (0x1122, "BasicPrinting", "org.bluetooth.profile.bpp"),
        (0x1123, "PrintingStatus", "org.bluetooth.service_class.bpp_printing_status"),
        (0x1124, "HumanInterfaceDeviceService", "org.bluetooth.profile.hid"),
        (0x1125, "HardcopyCableReplacement", "org.bluetooth.profile.hcrp"),
        (0x1126, "HCR_Print", "org.bluetooth.service_class.hcr_print"),
        (0x1127, "HCR_Scan", "org.bluetooth.service_class.hcr_scan"),
        (0x1128, "Common_ISDN_Access", "org.bluetooth.service_class.isdn"),
        (0x112D, "SIM_Access", "org.bluetooth.profile.sap"),
        (0x112E, "Phonebook Access - PCE", "org.bluetooth.service_class.phone_book_access_pce"),
        (0x112F, "Phonebook Access - PSE", "org.bluetooth.service_class.phone_book_access_pse"),
        (0x1130, "Phonebook Access", "org.bluetooth.profile.phone_book_access"),
        (0x1131, "Headset - HS", "org.bluetooth.service_class.headset_hs"),
        (0x1132, "Message Access Server", "org.bluetooth.service_class.map_server"),
        (0x1133, "Message Notification Server", "org.bluetooth.service_class.map_notification_server"),
        (0x1134, "Message Access Profile", "org.bluetooth.profile.message_access_profile"),
        (0x1135, "GNSS", "org.bluetooth.profile.global_navigiation_satellite_system"),
        (0x1136, "GNSS_Server", "org.bluetooth.service_class.global_navigiation_satellite_system_server"),
        (0x1137, "3D Display", "org.bluetooth.service_class.3d_display"),
        (0x1138, "3D Glasses", "org.bluetooth.service_class.3d_glasses"),
        (0x1139, "3D Synchronization", "org.bluetooth.profile.3d_synchronization"),
        (0x113A, "MPS Profile", "org.bluetooth.profile.multi_profile"),
        (0x113B, "MPS SC", "org.bluetooth.service_class.multi_profile_service"),
        (0x113C, "CTN Access Service", "org.bluetooth.service_class.calendar_task_note_access"),
        (0x113D, "CTN Notification Service", "org.bluetooth.service_class.calendar_task_note_notification"),
        (0x113E, "CTN Profile", "org.bluetooth.profile.calendar_task_notes"),
        (0x1200, "PnPInformation", "org.bluetooth.service_class.device_identification"),
        (0x1201, "GenericNetworking", "org.bluetooth.service_class.generic_networking"),
        (0x1202, "GenericFileTransfer", "org.bluetooth.service_class.generic_file_transfer"),
        (0x1203, "GenericAudio", "org.bluetooth.service_class.generic_audio"),
        (0x1204, "GenericTelephony", "org.bluetooth.service_class.generic_telephony"),
        (0x1205, "UPNP_Service", "org.bluetooth.service_class.enhanced_service_discovery_service"),
        (0x1206, "UPNP_IP_Service", "org.bluetooth.service_class.enhanced_service_discovery_ip_service"),
        (0x1300, "ESDP_UPNP_IP_PAN", "org.bluetooth.service_class.enhanced_service_discovery_ip_pan_service"),
        (0x1301, "ESDP_UPNP_IP_LAP", "org.bluetooth.service_class.enhanced_service_discovery_ip_lap_service"),
        (0x1302, "ESDP_UPNP_L2CAP", "org.bluetooth.service_class.enhanced_service_discovery_l2cap_service"),
        (0x1303, "VideoSource", "org.bluetooth.service_class.video_distribution_source"),
        (0x1304, "VideoSink", "org.bluetooth.service_class.video_distribution_sink"),
        (0x1305, "VideoDistribution", "org.bluetooth.profile.video_distribution"),
        (0x1400, "HDP", "org.bluetooth.profile.health_device"),
        (0x1401, "HDP Source", "org.bluetooth.service_class.health_device_source"),
        (0x1402, "HDP Sink", "org.bluetooth.service_class.health_device_sink")
    );
}
