# frozen_string_literal: true

# Licensed to the Software Freedom Conservancy (SFC) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The SFC licenses this file
# to you 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.

# This file is automatically generated. DO NOT EDIT!
# Regenerate with: bazel run //rb/lib/selenium/webdriver:bidi-generate

module Selenium
  module WebDriver
    class BiDi
      module Protocol
        # @api private
        # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
        class Bluetooth < Domain
          EVENTS = {
            request_device_prompt_updated: 'bluetooth.requestDevicePromptUpdated',
            gatt_connection_attempted: 'bluetooth.gattConnectionAttempted'
          }.freeze

          SIMULATE_ADAPTER_PARAMETERS_STATE = {
            absent: 'absent',
            powered_off: 'powered-off',
            powered_on: 'powered-on'
          }.freeze

          SIMULATE_SERVICE_PARAMETERS_TYPE = {
            add: 'add',
            remove: 'remove'
          }.freeze

          SIMULATE_CHARACTERISTIC_PARAMETERS_TYPE = {
            add: 'add',
            remove: 'remove'
          }.freeze

          SIMULATE_CHARACTERISTIC_RESPONSE_PARAMETERS_TYPE = {
            read: 'read',
            write: 'write',
            subscribe_to_notifications: 'subscribe-to-notifications',
            unsubscribe_from_notifications: 'unsubscribe-from-notifications'
          }.freeze

          SIMULATE_DESCRIPTOR_PARAMETERS_TYPE = {
            add: 'add',
            remove: 'remove'
          }.freeze

          SIMULATE_DESCRIPTOR_RESPONSE_PARAMETERS_TYPE = {
            read: 'read',
            write: 'write'
          }.freeze

          CHARACTERISTIC_EVENT_GENERATED_PARAMETERS_TYPE = {
            read: 'read',
            write_with_response: 'write-with-response',
            write_without_response: 'write-without-response',
            subscribe_to_notifications: 'subscribe-to-notifications',
            unsubscribe_from_notifications: 'unsubscribe-from-notifications'
          }.freeze

          DESCRIPTOR_EVENT_GENERATED_PARAMETERS_TYPE = {
            read: 'read',
            write: 'write'
          }.freeze

          # @api private
          # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
          BluetoothManufacturerData = Serialization::Record.define(
            key: {wire_key: 'key', primitive: 'integer'},
            data: {wire_key: 'data', primitive: 'string'}
          )

          # @api private
          # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
          CharacteristicProperties = Serialization::Record.define(
            broadcast: {wire_key: 'broadcast', required: false, primitive: 'boolean'},
            read: {wire_key: 'read', required: false, primitive: 'boolean'},
            write_without_response: {wire_key: 'writeWithoutResponse', required: false, primitive: 'boolean'},
            write: {wire_key: 'write', required: false, primitive: 'boolean'},
            notify: {wire_key: 'notify', required: false, primitive: 'boolean'},
            indicate: {wire_key: 'indicate', required: false, primitive: 'boolean'},
            authenticated_signed_writes: {wire_key: 'authenticatedSignedWrites', required: false, primitive: 'boolean'},
            extended_properties: {wire_key: 'extendedProperties', required: false, primitive: 'boolean'}
          )

          # @api private
          # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
          RequestDeviceInfo = Serialization::Record.define(
            id: 'id',
            name: {wire_key: 'name', nullable: true, primitive: 'string'}
          )

          # @api private
          # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
          ScanRecord = Serialization::Record.define(
            name: {wire_key: 'name', required: false, primitive: 'string'},
            uuids: {wire_key: 'uuids', required: false, list: true},
            appearance: {wire_key: 'appearance', required: false, primitive: 'number'},
            manufacturer_data: {
              wire_key: 'manufacturerData',
              required: false,
              ref: 'Bluetooth::BluetoothManufacturerData',
              list: true
            }
          )

          # @api private
          # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
          class HandleRequestDevicePromptParameters < Serialization::Union
            discriminator 'accept'
            variants(
              true => 'Bluetooth::HandleRequestDevicePromptParameters::AcceptParameters',
              false => 'Bluetooth::HandleRequestDevicePromptParameters::CancelParameters'
            )

            # @api private
            # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
            AcceptParameters = Serialization::Record.define(
              accept: {fixed: true},
              context: {wire_key: 'context', primitive: 'string'},
              prompt: 'prompt',
              device: 'device'
            )

            # @api private
            # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
            CancelParameters = Serialization::Record.define(
              accept: {fixed: false},
              context: {wire_key: 'context', primitive: 'string'},
              prompt: 'prompt'
            )
          end

          # @api private
          # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
          SimulateAdapterParameters = Serialization::Record.define(
            context: {wire_key: 'context', primitive: 'string'},
            le_supported: {wire_key: 'leSupported', required: false, primitive: 'boolean'},
            state: {wire_key: 'state', enum: 'Bluetooth::SIMULATE_ADAPTER_PARAMETERS_STATE'}
          )

          # @api private
          # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
          DisableSimulationParameters = Serialization::Record.define(
            context: {wire_key: 'context', primitive: 'string'}
          )

          # @api private
          # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
          SimulatePreconnectedPeripheralParameters = Serialization::Record.define(
            context: {wire_key: 'context', primitive: 'string'},
            address: {wire_key: 'address', primitive: 'string'},
            name: {wire_key: 'name', primitive: 'string'},
            manufacturer_data: {wire_key: 'manufacturerData', ref: 'Bluetooth::BluetoothManufacturerData', list: true},
            known_service_uuids: {wire_key: 'knownServiceUuids', list: true}
          )

          # @api private
          # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
          SimulateAdvertisementParameters = Serialization::Record.define(
            context: {wire_key: 'context', primitive: 'string'},
            scan_entry: {wire_key: 'scanEntry', ref: 'Bluetooth::SimulateAdvertisementScanEntryParameters'}
          )

          # @api private
          # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
          SimulateAdvertisementScanEntryParameters = Serialization::Record.define(
            device_address: {wire_key: 'deviceAddress', primitive: 'string'},
            rssi: {wire_key: 'rssi', primitive: 'number'},
            scan_record: {wire_key: 'scanRecord', ref: 'Bluetooth::ScanRecord'}
          )

          # @api private
          # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
          SimulateGattConnectionResponseParameters = Serialization::Record.define(
            context: {wire_key: 'context', primitive: 'string'},
            address: {wire_key: 'address', primitive: 'string'},
            code: {wire_key: 'code', primitive: 'integer'}
          )

          # @api private
          # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
          SimulateGattDisconnectionParameters = Serialization::Record.define(
            context: {wire_key: 'context', primitive: 'string'},
            address: {wire_key: 'address', primitive: 'string'}
          )

          # @api private
          # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
          SimulateServiceParameters = Serialization::Record.define(
            context: {wire_key: 'context', primitive: 'string'},
            address: {wire_key: 'address', primitive: 'string'},
            uuid: 'uuid',
            type: {wire_key: 'type', enum: 'Bluetooth::SIMULATE_SERVICE_PARAMETERS_TYPE'}
          )

          # @api private
          # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
          SimulateCharacteristicParameters = Serialization::Record.define(
            context: {wire_key: 'context', primitive: 'string'},
            address: {wire_key: 'address', primitive: 'string'},
            service_uuid: 'serviceUuid',
            characteristic_uuid: 'characteristicUuid',
            characteristic_properties: {
              wire_key: 'characteristicProperties',
              required: false,
              ref: 'Bluetooth::CharacteristicProperties'
            },
            type: {wire_key: 'type', enum: 'Bluetooth::SIMULATE_CHARACTERISTIC_PARAMETERS_TYPE'}
          )

          # @api private
          # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
          SimulateCharacteristicResponseParameters = Serialization::Record.define(
            context: {wire_key: 'context', primitive: 'string'},
            address: {wire_key: 'address', primitive: 'string'},
            service_uuid: 'serviceUuid',
            characteristic_uuid: 'characteristicUuid',
            type: {wire_key: 'type', enum: 'Bluetooth::SIMULATE_CHARACTERISTIC_RESPONSE_PARAMETERS_TYPE'},
            code: {wire_key: 'code', primitive: 'integer'},
            data: {wire_key: 'data', required: false, list: true}
          )

          # @api private
          # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
          SimulateDescriptorParameters = Serialization::Record.define(
            context: {wire_key: 'context', primitive: 'string'},
            address: {wire_key: 'address', primitive: 'string'},
            service_uuid: 'serviceUuid',
            characteristic_uuid: 'characteristicUuid',
            descriptor_uuid: 'descriptorUuid',
            type: {wire_key: 'type', enum: 'Bluetooth::SIMULATE_DESCRIPTOR_PARAMETERS_TYPE'}
          )

          # @api private
          # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
          SimulateDescriptorResponseParameters = Serialization::Record.define(
            context: {wire_key: 'context', primitive: 'string'},
            address: {wire_key: 'address', primitive: 'string'},
            service_uuid: 'serviceUuid',
            characteristic_uuid: 'characteristicUuid',
            descriptor_uuid: 'descriptorUuid',
            type: {wire_key: 'type', enum: 'Bluetooth::SIMULATE_DESCRIPTOR_RESPONSE_PARAMETERS_TYPE'},
            code: {wire_key: 'code', primitive: 'integer'},
            data: {wire_key: 'data', required: false, list: true}
          )

          # @api private
          # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
          RequestDevicePromptUpdatedParameters = Serialization::Record.define(
            context: {wire_key: 'context', primitive: 'string'},
            prompt: 'prompt',
            devices: {wire_key: 'devices', ref: 'Bluetooth::RequestDeviceInfo', list: true}
          )

          # @api private
          # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
          GattConnectionAttemptedParameters = Serialization::Record.define(
            context: {wire_key: 'context', primitive: 'string'},
            address: {wire_key: 'address', primitive: 'string'}
          )

          # @api private
          # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
          CharacteristicEventGeneratedParameters = Serialization::Record.define(
            context: {wire_key: 'context', primitive: 'string'},
            address: {wire_key: 'address', primitive: 'string'},
            service_uuid: 'serviceUuid',
            characteristic_uuid: 'characteristicUuid',
            type: {wire_key: 'type', enum: 'Bluetooth::CHARACTERISTIC_EVENT_GENERATED_PARAMETERS_TYPE'},
            data: {wire_key: 'data', required: false, list: true}
          )

          # @api private
          # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
          DescriptorEventGeneratedParameters = Serialization::Record.define(
            context: {wire_key: 'context', primitive: 'string'},
            address: {wire_key: 'address', primitive: 'string'},
            service_uuid: 'serviceUuid',
            characteristic_uuid: 'characteristicUuid',
            descriptor_uuid: 'descriptorUuid',
            type: {wire_key: 'type', enum: 'Bluetooth::DESCRIPTOR_EVENT_GENERATED_PARAMETERS_TYPE'},
            data: {wire_key: 'data', required: false, list: true}
          )

          EVENT_TYPES = {
            'bluetooth.requestDevicePromptUpdated' => Bluetooth::RequestDevicePromptUpdatedParameters,
            'bluetooth.gattConnectionAttempted' => Bluetooth::GattConnectionAttemptedParameters
          }.freeze

          # @api private
          # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
          def handle_request_device_prompt(context:, prompt:, accept:, device: Serialization::UNSET)
            params = HandleRequestDevicePromptParameters.build(
              context: context,
              prompt: prompt,
              accept: accept,
              device: device
            )
            execute(cmd: 'bluetooth.handleRequestDevicePrompt', params: params)
          end

          # @api private
          # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
          def simulate_adapter(context:, state:, le_supported: Serialization::UNSET)
            Serialization.validate!('state', state, Bluetooth::SIMULATE_ADAPTER_PARAMETERS_STATE)
            params = SimulateAdapterParameters.new(context: context, le_supported: le_supported, state: state)
            execute(cmd: 'bluetooth.simulateAdapter', params: params)
          end

          # @api private
          # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
          def disable_simulation(context:)
            params = DisableSimulationParameters.new(context: context)
            execute(cmd: 'bluetooth.disableSimulation', params: params)
          end

          # @api private
          # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
          def simulate_preconnected_peripheral(context:, address:, name:, manufacturer_data:, known_service_uuids:)
            params = SimulatePreconnectedPeripheralParameters.new(
              context: context,
              address: address,
              name: name,
              manufacturer_data: manufacturer_data,
              known_service_uuids: known_service_uuids
            )
            execute(cmd: 'bluetooth.simulatePreconnectedPeripheral', params: params)
          end

          # @api private
          # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
          def simulate_advertisement(context:, scan_entry:)
            params = SimulateAdvertisementParameters.new(context: context, scan_entry: scan_entry)
            execute(cmd: 'bluetooth.simulateAdvertisement', params: params)
          end

          # @api private
          # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
          def simulate_gatt_connection_response(context:, address:, code:)
            params = SimulateGattConnectionResponseParameters.new(context: context, address: address, code: code)
            execute(cmd: 'bluetooth.simulateGattConnectionResponse', params: params)
          end

          # @api private
          # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
          def simulate_gatt_disconnection(context:, address:)
            params = SimulateGattDisconnectionParameters.new(context: context, address: address)
            execute(cmd: 'bluetooth.simulateGattDisconnection', params: params)
          end

          # @api private
          # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
          def simulate_service(context:, address:, uuid:, type:)
            Serialization.validate!('type', type, Bluetooth::SIMULATE_SERVICE_PARAMETERS_TYPE)
            params = SimulateServiceParameters.new(context: context, address: address, uuid: uuid, type: type)
            execute(cmd: 'bluetooth.simulateService', params: params)
          end

          # @api private
          # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
          def simulate_characteristic(
            context:,
            address:,
            service_uuid:,
            characteristic_uuid:,
            type:,
            characteristic_properties: Serialization::UNSET
          )
            Serialization.validate!('type', type, Bluetooth::SIMULATE_CHARACTERISTIC_PARAMETERS_TYPE)
            params = SimulateCharacteristicParameters.new(
              context: context,
              address: address,
              service_uuid: service_uuid,
              characteristic_uuid: characteristic_uuid,
              characteristic_properties: characteristic_properties,
              type: type
            )
            execute(cmd: 'bluetooth.simulateCharacteristic', params: params)
          end

          # @api private
          # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
          def simulate_characteristic_response(
            context:,
            address:,
            service_uuid:,
            characteristic_uuid:,
            type:,
            code:,
            data: Serialization::UNSET
          )
            Serialization.validate!('type', type, Bluetooth::SIMULATE_CHARACTERISTIC_RESPONSE_PARAMETERS_TYPE)
            params = SimulateCharacteristicResponseParameters.new(
              context: context,
              address: address,
              service_uuid: service_uuid,
              characteristic_uuid: characteristic_uuid,
              type: type,
              code: code,
              data: data
            )
            execute(cmd: 'bluetooth.simulateCharacteristicResponse', params: params)
          end

          # @api private
          # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
          def simulate_descriptor(context:, address:, service_uuid:, characteristic_uuid:, descriptor_uuid:, type:)
            Serialization.validate!('type', type, Bluetooth::SIMULATE_DESCRIPTOR_PARAMETERS_TYPE)
            params = SimulateDescriptorParameters.new(
              context: context,
              address: address,
              service_uuid: service_uuid,
              characteristic_uuid: characteristic_uuid,
              descriptor_uuid: descriptor_uuid,
              type: type
            )
            execute(cmd: 'bluetooth.simulateDescriptor', params: params)
          end

          # @api private
          # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
          def simulate_descriptor_response(
            context:,
            address:,
            service_uuid:,
            characteristic_uuid:,
            descriptor_uuid:,
            type:,
            code:,
            data: Serialization::UNSET
          )
            Serialization.validate!('type', type, Bluetooth::SIMULATE_DESCRIPTOR_RESPONSE_PARAMETERS_TYPE)
            params = SimulateDescriptorResponseParameters.new(
              context: context,
              address: address,
              service_uuid: service_uuid,
              characteristic_uuid: characteristic_uuid,
              descriptor_uuid: descriptor_uuid,
              type: type,
              code: code,
              data: data
            )
            execute(cmd: 'bluetooth.simulateDescriptorResponse', params: params)
          end
        end # Bluetooth
      end # Protocol
    end # BiDi
  end # WebDriver
end # Selenium
