# Copyright 2015 Google Inc.
#
# 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.

require 'google/apis/core/base_service'
require 'google/apis/core/json_representation'
require 'google/apis/core/hashable'
require 'google/apis/errors'

module Google
  module Apis
    module ProximitybeaconV1beta1
      # Google Proximity Beacon API
      #
      # Registers, manages, indexes, and searches beacons.
      #
      # @example
      #    require 'google/apis/proximitybeacon_v1beta1'
      #
      #    Proximitybeacon = Google::Apis::ProximitybeaconV1beta1 # Alias the module
      #    service = Proximitybeacon::ProximitybeaconService.new
      #
      # @see https://developers.google.com/beacons/proximity/
      class ProximitybeaconService < Google::Apis::Core::BaseService
        # @return [String]
        #  API key. Your API key identifies your project and provides you with API access,
        #  quota, and reports. Required unless you provide an OAuth 2.0 token.
        attr_accessor :key

        # @return [String]
        #  Available to use for quota purposes for server-side applications. Can be any
        #  arbitrary string assigned to a user, but should not exceed 40 characters.
        attr_accessor :quota_user

        def initialize
          super('https://proximitybeacon.googleapis.com/', '')
        end
        
        # Registers a previously unregistered beacon given its `advertisedId`. These IDs
        # are unique within the system. An ID can be registered only once. Authenticate
        # using an [OAuth access token](https://developers.google.com/identity/protocols/
        # OAuth2) from a signed-in user with **Is owner** or **Can edit** permissions in
        # the Google Developers Console project.
        # @param [Google::Apis::ProximitybeaconV1beta1::Beacon] beacon_object
        # @param [String] project_id
        #   The project id of the project the beacon will be registered to. If the project
        #   id is not specified then the project making the request is used. Optional.
        # @param [String] fields
        #   Selector specifying which fields to include in a partial response.
        # @param [String] quota_user
        #   Available to use for quota purposes for server-side applications. Can be any
        #   arbitrary string assigned to a user, but should not exceed 40 characters.
        # @param [Google::Apis::RequestOptions] options
        #   Request-specific options
        #
        # @yield [result, err] Result & error if block supplied
        # @yieldparam result [Google::Apis::ProximitybeaconV1beta1::Beacon] parsed result object
        # @yieldparam err [StandardError] error object if request failed
        #
        # @return [Google::Apis::ProximitybeaconV1beta1::Beacon]
        #
        # @raise [Google::Apis::ServerError] An error occurred on the server and the request can be retried
        # @raise [Google::Apis::ClientError] The request is invalid and should not be retried without modification
        # @raise [Google::Apis::AuthorizationError] Authorization is required
        def register_beacon(beacon_object = nil, project_id: nil, fields: nil, quota_user: nil, options: nil, &block)
          command =  make_simple_command(:post, 'v1beta1/beacons:register', options)
          command.request_representation = Google::Apis::ProximitybeaconV1beta1::Beacon::Representation
          command.request_object = beacon_object
          command.response_representation = Google::Apis::ProximitybeaconV1beta1::Beacon::Representation
          command.response_class = Google::Apis::ProximitybeaconV1beta1::Beacon
          command.query['projectId'] = project_id unless project_id.nil?
          command.query['fields'] = fields unless fields.nil?
          command.query['quotaUser'] = quota_user unless quota_user.nil?
          execute_or_queue_command(command, &block)
        end
        
        # Decommissions the specified beacon in the service. This beacon will no longer
        # be returned from `beaconinfo.getforobserved`. This operation is permanent --
        # you will not be able to re-register a beacon with this ID again. Authenticate
        # using an [OAuth access token](https://developers.google.com/identity/protocols/
        # OAuth2) from a signed-in user with **Is owner** or **Can edit** permissions in
        # the Google Developers Console project.
        # @param [String] beacon_name
        #   Beacon that should be decommissioned. A beacon name has the format "beacons/N!
        #   beaconId" where the beaconId is the base16 ID broadcast by the beacon and N is
        #   a code for the beacon's type. Possible values are `3` for Eddystone-UID, `4`
        #   for Eddystone-EID, `1` for iBeacon, or `5` for AltBeacon. For Eddystone-EID
        #   beacons, you may use either the current EID of the beacon's "stable" UID.
        #   Required.
        # @param [String] project_id
        #   The project id of the beacon to decommission. If the project id is not
        #   specified then the project making the request is used. The project id must
        #   match the project that owns the beacon. Optional.
        # @param [String] fields
        #   Selector specifying which fields to include in a partial response.
        # @param [String] quota_user
        #   Available to use for quota purposes for server-side applications. Can be any
        #   arbitrary string assigned to a user, but should not exceed 40 characters.
        # @param [Google::Apis::RequestOptions] options
        #   Request-specific options
        #
        # @yield [result, err] Result & error if block supplied
        # @yieldparam result [Google::Apis::ProximitybeaconV1beta1::Empty] parsed result object
        # @yieldparam err [StandardError] error object if request failed
        #
        # @return [Google::Apis::ProximitybeaconV1beta1::Empty]
        #
        # @raise [Google::Apis::ServerError] An error occurred on the server and the request can be retried
        # @raise [Google::Apis::ClientError] The request is invalid and should not be retried without modification
        # @raise [Google::Apis::AuthorizationError] Authorization is required
        def decommission_beacon(beacon_name, project_id: nil, fields: nil, quota_user: nil, options: nil, &block)
          command =  make_simple_command(:post, 'v1beta1/{+beaconName}:decommission', options)
          command.response_representation = Google::Apis::ProximitybeaconV1beta1::Empty::Representation
          command.response_class = Google::Apis::ProximitybeaconV1beta1::Empty
          command.params['beaconName'] = beacon_name unless beacon_name.nil?
          command.query['projectId'] = project_id unless project_id.nil?
          command.query['fields'] = fields unless fields.nil?
          command.query['quotaUser'] = quota_user unless quota_user.nil?
          execute_or_queue_command(command, &block)
        end
        
        # Returns detailed information about the specified beacon. Authenticate using an
        # [OAuth access token](https://developers.google.com/identity/protocols/OAuth2)
        # from a signed-in user with **viewer**, **Is owner** or **Can edit**
        # permissions in the Google Developers Console project. Requests may supply an
        # Eddystone-EID beacon name in the form: `beacons/4!beaconId` where the `
        # beaconId` is the base16 ephemeral ID broadcast by the beacon. The returned `
        # Beacon` object will contain the beacon's stable Eddystone-UID. Clients not
        # authorized to resolve the beacon's ephemeral Eddystone-EID broadcast will
        # receive an error.
        # @param [String] beacon_name
        #   Resource name of this beacon. A beacon name has the format "beacons/N!beaconId"
        #   where the beaconId is the base16 ID broadcast by the beacon and N is a code
        #   for the beacon's type. Possible values are `3` for Eddystone-UID, `4` for
        #   Eddystone-EID, `1` for iBeacon, or `5` for AltBeacon. For Eddystone-EID
        #   beacons, you may use either the current EID or the beacon's "stable" UID.
        #   Required.
        # @param [String] project_id
        #   The project id of the beacon to request. If the project id is not specified
        #   then the project making the request is used. The project id must match the
        #   project that owns the beacon. Optional.
        # @param [String] fields
        #   Selector specifying which fields to include in a partial response.
        # @param [String] quota_user
        #   Available to use for quota purposes for server-side applications. Can be any
        #   arbitrary string assigned to a user, but should not exceed 40 characters.
        # @param [Google::Apis::RequestOptions] options
        #   Request-specific options
        #
        # @yield [result, err] Result & error if block supplied
        # @yieldparam result [Google::Apis::ProximitybeaconV1beta1::Beacon] parsed result object
        # @yieldparam err [StandardError] error object if request failed
        #
        # @return [Google::Apis::ProximitybeaconV1beta1::Beacon]
        #
        # @raise [Google::Apis::ServerError] An error occurred on the server and the request can be retried
        # @raise [Google::Apis::ClientError] The request is invalid and should not be retried without modification
        # @raise [Google::Apis::AuthorizationError] Authorization is required
        def get_beacon(beacon_name, project_id: nil, fields: nil, quota_user: nil, options: nil, &block)
          command =  make_simple_command(:get, 'v1beta1/{+beaconName}', options)
          command.response_representation = Google::Apis::ProximitybeaconV1beta1::Beacon::Representation
          command.response_class = Google::Apis::ProximitybeaconV1beta1::Beacon
          command.params['beaconName'] = beacon_name unless beacon_name.nil?
          command.query['projectId'] = project_id unless project_id.nil?
          command.query['fields'] = fields unless fields.nil?
          command.query['quotaUser'] = quota_user unless quota_user.nil?
          execute_or_queue_command(command, &block)
        end
        
        # Searches the beacon registry for beacons that match the given search criteria.
        # Only those beacons that the client has permission to list will be returned.
        # Authenticate using an [OAuth access token](https://developers.google.com/
        # identity/protocols/OAuth2) from a signed-in user with **viewer**, **Is owner**
        # or **Can edit** permissions in the Google Developers Console project.
        # @param [String] q
        #   Filter query string that supports the following field filters: * `description:"
        #   "` For example: `description:"Room 3"` Returns beacons whose description
        #   matches tokens in the string "Room 3" (not necessarily that exact string). The
        #   string must be double-quoted. * `status:` For example: `status:active` Returns
        #   beacons whose status matches the given value. Values must be one of the Beacon.
        #   Status enum values (case insensitive). Accepts multiple filters which will be
        #   combined with OR logic. * `stability:` For example: `stability:mobile` Returns
        #   beacons whose expected stability matches the given value. Values must be one
        #   of the Beacon.Stability enum values (case insensitive). Accepts multiple
        #   filters which will be combined with OR logic. * `place_id:""` For example: `
        #   place_id:"ChIJVSZzVR8FdkgRXGmmm6SslKw="` Returns beacons explicitly registered
        #   at the given place, expressed as a Place ID obtained from [Google Places API](/
        #   places/place-id). Does not match places inside the given place. Does not
        #   consider the beacon's actual location (which may be different from its
        #   registered place). Accepts multiple filters that will be combined with OR
        #   logic. The place ID must be double-quoted. * `registration_time[|=]` For
        #   example: `registration_time>=1433116800` Returns beacons whose registration
        #   time matches the given filter. Supports the operators: , =. Timestamp must be
        #   expressed as an integer number of seconds since midnight January 1, 1970 UTC.
        #   Accepts at most two filters that will be combined with AND logic, to support "
        #   between" semantics. If more than two are supplied, the latter ones are ignored.
        #   * `lat: lng: radius:` For example: `lat:51.1232343 lng:-1.093852 radius:1000`
        #   Returns beacons whose registered location is within the given circle. When any
        #   of these fields are given, all are required. Latitude and longitude must be
        #   decimal degrees between -90.0 and 90.0 and between -180.0 and 180.0
        #   respectively. Radius must be an integer number of meters between 10 and 1,000,
        #   000 (1000 km). * `property:"="` For example: `property:"battery-type=CR2032"`
        #   Returns beacons which have a property of the given name and value. Supports
        #   multiple filters which will be combined with OR logic. The entire name=value
        #   string must be double-quoted as one string. * `attachment_type:""` For example:
        #   `attachment_type:"my-namespace/my-type"` Returns beacons having at least one
        #   attachment of the given namespaced type. Supports "any within this namespace"
        #   via the partial wildcard syntax: "my-namespace/*". Supports multiple filters
        #   which will be combined with OR logic. The string must be double-quoted.
        #   Multiple filters on the same field are combined with OR logic (except
        #   registration_time which is combined with AND logic). Multiple filters on
        #   different fields are combined with AND logic. Filters should be separated by
        #   spaces. As with any HTTP query string parameter, the whole filter expression
        #   must be URL-encoded. Example REST request: `GET /v1beta1/beacons?q=status:
        #   active%20lat:51.123%20lng:-1.095%20radius:1000`
        # @param [String] page_token
        #   A pagination token obtained from a previous request to list beacons.
        # @param [Fixnum] page_size
        #   The maximum number of records to return for this request, up to a server-
        #   defined upper limit.
        # @param [String] project_id
        #   The project id to list beacons under. If not present then the project
        #   credential that made the request is used as the project. Optional.
        # @param [String] fields
        #   Selector specifying which fields to include in a partial response.
        # @param [String] quota_user
        #   Available to use for quota purposes for server-side applications. Can be any
        #   arbitrary string assigned to a user, but should not exceed 40 characters.
        # @param [Google::Apis::RequestOptions] options
        #   Request-specific options
        #
        # @yield [result, err] Result & error if block supplied
        # @yieldparam result [Google::Apis::ProximitybeaconV1beta1::ListBeaconsResponse] parsed result object
        # @yieldparam err [StandardError] error object if request failed
        #
        # @return [Google::Apis::ProximitybeaconV1beta1::ListBeaconsResponse]
        #
        # @raise [Google::Apis::ServerError] An error occurred on the server and the request can be retried
        # @raise [Google::Apis::ClientError] The request is invalid and should not be retried without modification
        # @raise [Google::Apis::AuthorizationError] Authorization is required
        def list_beacons(q: nil, page_token: nil, page_size: nil, project_id: nil, fields: nil, quota_user: nil, options: nil, &block)
          command =  make_simple_command(:get, 'v1beta1/beacons', options)
          command.response_representation = Google::Apis::ProximitybeaconV1beta1::ListBeaconsResponse::Representation
          command.response_class = Google::Apis::ProximitybeaconV1beta1::ListBeaconsResponse
          command.query['q'] = q unless q.nil?
          command.query['pageToken'] = page_token unless page_token.nil?
          command.query['pageSize'] = page_size unless page_size.nil?
          command.query['projectId'] = project_id unless project_id.nil?
          command.query['fields'] = fields unless fields.nil?
          command.query['quotaUser'] = quota_user unless quota_user.nil?
          execute_or_queue_command(command, &block)
        end
        
        # Updates the information about the specified beacon. **Any field that you do
        # not populate in the submitted beacon will be permanently erased**, so you
        # should follow the "read, modify, write" pattern to avoid inadvertently
        # destroying data. Changes to the beacon status via this method will be silently
        # ignored. To update beacon status, use the separate methods on this API for
        # activation, deactivation, and decommissioning. Authenticate using an [OAuth
        # access token](https://developers.google.com/identity/protocols/OAuth2) from a
        # signed-in user with **Is owner** or **Can edit** permissions in the Google
        # Developers Console project.
        # @param [String] beacon_name
        #   Resource name of this beacon. A beacon name has the format "beacons/N!beaconId"
        #   where the beaconId is the base16 ID broadcast by the beacon and N is a code
        #   for the beacon's type. Possible values are `3` for Eddystone, `1` for iBeacon,
        #   or `5` for AltBeacon. This field must be left empty when registering. After
        #   reading a beacon, clients can use the name for future operations.
        # @param [Google::Apis::ProximitybeaconV1beta1::Beacon] beacon_object
        # @param [String] project_id
        #   The project id of the beacon to update. If the project id is not specified
        #   then the project making the request is used. The project id must match the
        #   project that owns the beacon. Optional.
        # @param [String] fields
        #   Selector specifying which fields to include in a partial response.
        # @param [String] quota_user
        #   Available to use for quota purposes for server-side applications. Can be any
        #   arbitrary string assigned to a user, but should not exceed 40 characters.
        # @param [Google::Apis::RequestOptions] options
        #   Request-specific options
        #
        # @yield [result, err] Result & error if block supplied
        # @yieldparam result [Google::Apis::ProximitybeaconV1beta1::Beacon] parsed result object
        # @yieldparam err [StandardError] error object if request failed
        #
        # @return [Google::Apis::ProximitybeaconV1beta1::Beacon]
        #
        # @raise [Google::Apis::ServerError] An error occurred on the server and the request can be retried
        # @raise [Google::Apis::ClientError] The request is invalid and should not be retried without modification
        # @raise [Google::Apis::AuthorizationError] Authorization is required
        def update_beacon(beacon_name, beacon_object = nil, project_id: nil, fields: nil, quota_user: nil, options: nil, &block)
          command =  make_simple_command(:put, 'v1beta1/{+beaconName}', options)
          command.request_representation = Google::Apis::ProximitybeaconV1beta1::Beacon::Representation
          command.request_object = beacon_object
          command.response_representation = Google::Apis::ProximitybeaconV1beta1::Beacon::Representation
          command.response_class = Google::Apis::ProximitybeaconV1beta1::Beacon
          command.params['beaconName'] = beacon_name unless beacon_name.nil?
          command.query['projectId'] = project_id unless project_id.nil?
          command.query['fields'] = fields unless fields.nil?
          command.query['quotaUser'] = quota_user unless quota_user.nil?
          execute_or_queue_command(command, &block)
        end
        
        # Activates a beacon. A beacon that is active will return information and
        # attachment data when queried via `beaconinfo.getforobserved`. Calling this
        # method on an already active beacon will do nothing (but will return a
        # successful response code). Authenticate using an [OAuth access token](https://
        # developers.google.com/identity/protocols/OAuth2) from a signed-in user with **
        # Is owner** or **Can edit** permissions in the Google Developers Console
        # project.
        # @param [String] beacon_name
        #   Beacon that should be activated. A beacon name has the format "beacons/N!
        #   beaconId" where the beaconId is the base16 ID broadcast by the beacon and N is
        #   a code for the beacon's type. Possible values are `3` for Eddystone-UID, `4`
        #   for Eddystone-EID, `1` for iBeacon, or `5` for AltBeacon. For Eddystone-EID
        #   beacons, you may use either the current EID or the beacon's "stable" UID.
        #   Required.
        # @param [String] project_id
        #   The project id of the beacon to activate. If the project id is not specified
        #   then the project making the request is used. The project id must match the
        #   project that owns the beacon. Optional.
        # @param [String] fields
        #   Selector specifying which fields to include in a partial response.
        # @param [String] quota_user
        #   Available to use for quota purposes for server-side applications. Can be any
        #   arbitrary string assigned to a user, but should not exceed 40 characters.
        # @param [Google::Apis::RequestOptions] options
        #   Request-specific options
        #
        # @yield [result, err] Result & error if block supplied
        # @yieldparam result [Google::Apis::ProximitybeaconV1beta1::Empty] parsed result object
        # @yieldparam err [StandardError] error object if request failed
        #
        # @return [Google::Apis::ProximitybeaconV1beta1::Empty]
        #
        # @raise [Google::Apis::ServerError] An error occurred on the server and the request can be retried
        # @raise [Google::Apis::ClientError] The request is invalid and should not be retried without modification
        # @raise [Google::Apis::AuthorizationError] Authorization is required
        def activate_beacon(beacon_name, project_id: nil, fields: nil, quota_user: nil, options: nil, &block)
          command =  make_simple_command(:post, 'v1beta1/{+beaconName}:activate', options)
          command.response_representation = Google::Apis::ProximitybeaconV1beta1::Empty::Representation
          command.response_class = Google::Apis::ProximitybeaconV1beta1::Empty
          command.params['beaconName'] = beacon_name unless beacon_name.nil?
          command.query['projectId'] = project_id unless project_id.nil?
          command.query['fields'] = fields unless fields.nil?
          command.query['quotaUser'] = quota_user unless quota_user.nil?
          execute_or_queue_command(command, &block)
        end
        
        # Deactivates a beacon. Once deactivated, the API will not return information
        # nor attachment data for the beacon when queried via `beaconinfo.getforobserved`
        # . Calling this method on an already inactive beacon will do nothing (but will
        # return a successful response code). Authenticate using an [OAuth access token](
        # https://developers.google.com/identity/protocols/OAuth2) from a signed-in user
        # with **Is owner** or **Can edit** permissions in the Google Developers Console
        # project.
        # @param [String] beacon_name
        #   Beacon that should be deactivated. A beacon name has the format "beacons/N!
        #   beaconId" where the beaconId is the base16 ID broadcast by the beacon and N is
        #   a code for the beacon's type. Possible values are `3` for Eddystone-UID, `4`
        #   for Eddystone-EID, `1` for iBeacon, or `5` for AltBeacon. For Eddystone-EID
        #   beacons, you may use either the current EID or the beacon's "stable" UID.
        #   Required.
        # @param [String] project_id
        #   The project id of the beacon to deactivate. If the project id is not specified
        #   then the project making the request is used. The project id must match the
        #   project that owns the beacon. Optional.
        # @param [String] fields
        #   Selector specifying which fields to include in a partial response.
        # @param [String] quota_user
        #   Available to use for quota purposes for server-side applications. Can be any
        #   arbitrary string assigned to a user, but should not exceed 40 characters.
        # @param [Google::Apis::RequestOptions] options
        #   Request-specific options
        #
        # @yield [result, err] Result & error if block supplied
        # @yieldparam result [Google::Apis::ProximitybeaconV1beta1::Empty] parsed result object
        # @yieldparam err [StandardError] error object if request failed
        #
        # @return [Google::Apis::ProximitybeaconV1beta1::Empty]
        #
        # @raise [Google::Apis::ServerError] An error occurred on the server and the request can be retried
        # @raise [Google::Apis::ClientError] The request is invalid and should not be retried without modification
        # @raise [Google::Apis::AuthorizationError] Authorization is required
        def deactivate_beacon(beacon_name, project_id: nil, fields: nil, quota_user: nil, options: nil, &block)
          command =  make_simple_command(:post, 'v1beta1/{+beaconName}:deactivate', options)
          command.response_representation = Google::Apis::ProximitybeaconV1beta1::Empty::Representation
          command.response_class = Google::Apis::ProximitybeaconV1beta1::Empty
          command.params['beaconName'] = beacon_name unless beacon_name.nil?
          command.query['projectId'] = project_id unless project_id.nil?
          command.query['fields'] = fields unless fields.nil?
          command.query['quotaUser'] = quota_user unless quota_user.nil?
          execute_or_queue_command(command, &block)
        end
        
        # Associates the given data with the specified beacon. Attachment data must
        # contain two parts:
        # - A namespaced type.
        # - The actual attachment data itself.  The namespaced type consists of two
        # parts, the namespace and the type. The namespace must be one of the values
        # returned by the `namespaces` endpoint, while the type can be a string of any
        # characters except for the forward slash (`/`) up to 100 characters in length.
        # Attachment data can be up to 1024 bytes long. Authenticate using an [OAuth
        # access token](https://developers.google.com/identity/protocols/OAuth2) from a
        # signed-in user with **Is owner** or **Can edit** permissions in the Google
        # Developers Console project.
        # @param [String] beacon_name
        #   Beacon on which the attachment should be created. A beacon name has the format
        #   "beacons/N!beaconId" where the beaconId is the base16 ID broadcast by the
        #   beacon and N is a code for the beacon's type. Possible values are `3` for
        #   Eddystone-UID, `4` for Eddystone-EID, `1` for iBeacon, or `5` for AltBeacon.
        #   For Eddystone-EID beacons, you may use either the current EID or the beacon's "
        #   stable" UID. Required.
        # @param [Google::Apis::ProximitybeaconV1beta1::BeaconAttachment] beacon_attachment_object
        # @param [String] project_id
        #   The project id of the project the attachment will belong to. If the project id
        #   is not specified then the project making the request is used. Optional.
        # @param [String] fields
        #   Selector specifying which fields to include in a partial response.
        # @param [String] quota_user
        #   Available to use for quota purposes for server-side applications. Can be any
        #   arbitrary string assigned to a user, but should not exceed 40 characters.
        # @param [Google::Apis::RequestOptions] options
        #   Request-specific options
        #
        # @yield [result, err] Result & error if block supplied
        # @yieldparam result [Google::Apis::ProximitybeaconV1beta1::BeaconAttachment] parsed result object
        # @yieldparam err [StandardError] error object if request failed
        #
        # @return [Google::Apis::ProximitybeaconV1beta1::BeaconAttachment]
        #
        # @raise [Google::Apis::ServerError] An error occurred on the server and the request can be retried
        # @raise [Google::Apis::ClientError] The request is invalid and should not be retried without modification
        # @raise [Google::Apis::AuthorizationError] Authorization is required
        def create_beacon_attachment(beacon_name, beacon_attachment_object = nil, project_id: nil, fields: nil, quota_user: nil, options: nil, &block)
          command =  make_simple_command(:post, 'v1beta1/{+beaconName}/attachments', options)
          command.request_representation = Google::Apis::ProximitybeaconV1beta1::BeaconAttachment::Representation
          command.request_object = beacon_attachment_object
          command.response_representation = Google::Apis::ProximitybeaconV1beta1::BeaconAttachment::Representation
          command.response_class = Google::Apis::ProximitybeaconV1beta1::BeaconAttachment
          command.params['beaconName'] = beacon_name unless beacon_name.nil?
          command.query['projectId'] = project_id unless project_id.nil?
          command.query['fields'] = fields unless fields.nil?
          command.query['quotaUser'] = quota_user unless quota_user.nil?
          execute_or_queue_command(command, &block)
        end
        
        # Returns the attachments for the specified beacon that match the specified
        # namespaced-type pattern. To control which namespaced types are returned, you
        # add the `namespacedType` query parameter to the request. You must either use `*
        # /*`, to return all attachments, or the namespace must be one of the ones
        # returned from the `namespaces` endpoint. Authenticate using an [OAuth access
        # token](https://developers.google.com/identity/protocols/OAuth2) from a signed-
        # in user with **viewer**, **Is owner** or **Can edit** permissions in the
        # Google Developers Console project.
        # @param [String] beacon_name
        #   Beacon whose attachments should be fetched. A beacon name has the format "
        #   beacons/N!beaconId" where the beaconId is the base16 ID broadcast by the
        #   beacon and N is a code for the beacon's type. Possible values are `3` for
        #   Eddystone-UID, `4` for Eddystone-EID, `1` for iBeacon, or `5` for AltBeacon.
        #   For Eddystone-EID beacons, you may use either the current EID or the beacon's "
        #   stable" UID. Required.
        # @param [String] namespaced_type
        #   Specifies the namespace and type of attachment to include in response in
        #   namespace/type format. Accepts `*/*` to specify "all types in all namespaces".
        # @param [String] project_id
        #   The project id to list beacon attachments under. This field can be used when "*
        #   " is specified to mean all attachment namespaces. Projects may have multiple
        #   attachments with multiple namespaces. If "*" is specified and the projectId
        #   string is empty, then the project making the request is used. Optional.
        # @param [String] fields
        #   Selector specifying which fields to include in a partial response.
        # @param [String] quota_user
        #   Available to use for quota purposes for server-side applications. Can be any
        #   arbitrary string assigned to a user, but should not exceed 40 characters.
        # @param [Google::Apis::RequestOptions] options
        #   Request-specific options
        #
        # @yield [result, err] Result & error if block supplied
        # @yieldparam result [Google::Apis::ProximitybeaconV1beta1::ListBeaconAttachmentsResponse] parsed result object
        # @yieldparam err [StandardError] error object if request failed
        #
        # @return [Google::Apis::ProximitybeaconV1beta1::ListBeaconAttachmentsResponse]
        #
        # @raise [Google::Apis::ServerError] An error occurred on the server and the request can be retried
        # @raise [Google::Apis::ClientError] The request is invalid and should not be retried without modification
        # @raise [Google::Apis::AuthorizationError] Authorization is required
        def list_beacon_attachments(beacon_name, namespaced_type: nil, project_id: nil, fields: nil, quota_user: nil, options: nil, &block)
          command =  make_simple_command(:get, 'v1beta1/{+beaconName}/attachments', options)
          command.response_representation = Google::Apis::ProximitybeaconV1beta1::ListBeaconAttachmentsResponse::Representation
          command.response_class = Google::Apis::ProximitybeaconV1beta1::ListBeaconAttachmentsResponse
          command.params['beaconName'] = beacon_name unless beacon_name.nil?
          command.query['namespacedType'] = namespaced_type unless namespaced_type.nil?
          command.query['projectId'] = project_id unless project_id.nil?
          command.query['fields'] = fields unless fields.nil?
          command.query['quotaUser'] = quota_user unless quota_user.nil?
          execute_or_queue_command(command, &block)
        end
        
        # Deletes the specified attachment for the given beacon. Each attachment has a
        # unique attachment name (`attachmentName`) which is returned when you fetch the
        # attachment data via this API. You specify this with the delete request to
        # control which attachment is removed. This operation cannot be undone.
        # Authenticate using an [OAuth access token](https://developers.google.com/
        # identity/protocols/OAuth2) from a signed-in user with **Is owner** or **Can
        # edit** permissions in the Google Developers Console project.
        # @param [String] attachment_name
        #   The attachment name (`attachmentName`) of the attachment to remove. For
        #   example: `beacons/3!893737abc9/attachments/c5e937-af0-494-959-ec49d12738`. For
        #   Eddystone-EID beacons, the beacon ID portion (`3!893737abc9`) may be the
        #   beacon's current EID, or its "stable" Eddystone-UID. Required.
        # @param [String] project_id
        #   The project id of the attachment to delete. If not provided, the project that
        #   is making the request is used. Optional.
        # @param [String] fields
        #   Selector specifying which fields to include in a partial response.
        # @param [String] quota_user
        #   Available to use for quota purposes for server-side applications. Can be any
        #   arbitrary string assigned to a user, but should not exceed 40 characters.
        # @param [Google::Apis::RequestOptions] options
        #   Request-specific options
        #
        # @yield [result, err] Result & error if block supplied
        # @yieldparam result [Google::Apis::ProximitybeaconV1beta1::Empty] parsed result object
        # @yieldparam err [StandardError] error object if request failed
        #
        # @return [Google::Apis::ProximitybeaconV1beta1::Empty]
        #
        # @raise [Google::Apis::ServerError] An error occurred on the server and the request can be retried
        # @raise [Google::Apis::ClientError] The request is invalid and should not be retried without modification
        # @raise [Google::Apis::AuthorizationError] Authorization is required
        def delete_beacon_attachment(attachment_name, project_id: nil, fields: nil, quota_user: nil, options: nil, &block)
          command =  make_simple_command(:delete, 'v1beta1/{+attachmentName}', options)
          command.response_representation = Google::Apis::ProximitybeaconV1beta1::Empty::Representation
          command.response_class = Google::Apis::ProximitybeaconV1beta1::Empty
          command.params['attachmentName'] = attachment_name unless attachment_name.nil?
          command.query['projectId'] = project_id unless project_id.nil?
          command.query['fields'] = fields unless fields.nil?
          command.query['quotaUser'] = quota_user unless quota_user.nil?
          execute_or_queue_command(command, &block)
        end
        
        # Deletes multiple attachments on a given beacon. This operation is permanent
        # and cannot be undone. You can optionally specify `namespacedType` to choose
        # which attachments should be deleted. If you do not specify `namespacedType`,
        # all your attachments on the given beacon will be deleted. You also may
        # explicitly specify `*/*` to delete all. Authenticate using an [OAuth access
        # token](https://developers.google.com/identity/protocols/OAuth2) from a signed-
        # in user with **Is owner** or **Can edit** permissions in the Google Developers
        # Console project.
        # @param [String] beacon_name
        #   The beacon whose attachments should be deleted. A beacon name has the format "
        #   beacons/N!beaconId" where the beaconId is the base16 ID broadcast by the
        #   beacon and N is a code for the beacon's type. Possible values are `3` for
        #   Eddystone-UID, `4` for Eddystone-EID, `1` for iBeacon, or `5` for AltBeacon.
        #   For Eddystone-EID beacons, you may use either the current EID or the beacon's "
        #   stable" UID. Required.
        # @param [String] namespaced_type
        #   Specifies the namespace and type of attachments to delete in `namespace/type`
        #   format. Accepts `*/*` to specify "all types in all namespaces". Optional.
        # @param [String] project_id
        #   The project id to delete beacon attachments under. This field can be used when
        #   "*" is specified to mean all attachment namespaces. Projects may have multiple
        #   attachments with multiple namespaces. If "*" is specified and the projectId
        #   string is empty, then the project making the request is used. Optional.
        # @param [String] fields
        #   Selector specifying which fields to include in a partial response.
        # @param [String] quota_user
        #   Available to use for quota purposes for server-side applications. Can be any
        #   arbitrary string assigned to a user, but should not exceed 40 characters.
        # @param [Google::Apis::RequestOptions] options
        #   Request-specific options
        #
        # @yield [result, err] Result & error if block supplied
        # @yieldparam result [Google::Apis::ProximitybeaconV1beta1::DeleteAttachmentsResponse] parsed result object
        # @yieldparam err [StandardError] error object if request failed
        #
        # @return [Google::Apis::ProximitybeaconV1beta1::DeleteAttachmentsResponse]
        #
        # @raise [Google::Apis::ServerError] An error occurred on the server and the request can be retried
        # @raise [Google::Apis::ClientError] The request is invalid and should not be retried without modification
        # @raise [Google::Apis::AuthorizationError] Authorization is required
        def batch_beacon_attachment_delete(beacon_name, namespaced_type: nil, project_id: nil, fields: nil, quota_user: nil, options: nil, &block)
          command =  make_simple_command(:post, 'v1beta1/{+beaconName}/attachments:batchDelete', options)
          command.response_representation = Google::Apis::ProximitybeaconV1beta1::DeleteAttachmentsResponse::Representation
          command.response_class = Google::Apis::ProximitybeaconV1beta1::DeleteAttachmentsResponse
          command.params['beaconName'] = beacon_name unless beacon_name.nil?
          command.query['namespacedType'] = namespaced_type unless namespaced_type.nil?
          command.query['projectId'] = project_id unless project_id.nil?
          command.query['fields'] = fields unless fields.nil?
          command.query['quotaUser'] = quota_user unless quota_user.nil?
          execute_or_queue_command(command, &block)
        end
        
        # List the diagnostics for a single beacon. You can also list diagnostics for
        # all the beacons owned by your Google Developers Console project by using the
        # beacon name `beacons/-`. Authenticate using an [OAuth access token](https://
        # developers.google.com/identity/protocols/OAuth2) from a signed-in user with **
        # viewer**, **Is owner** or **Can edit** permissions in the Google Developers
        # Console project.
        # @param [String] beacon_name
        #   Beacon that the diagnostics are for.
        # @param [Fixnum] page_size
        #   Specifies the maximum number of results to return. Defaults to 10. Maximum
        #   1000. Optional.
        # @param [String] page_token
        #   Requests results that occur after the `page_token`, obtained from the response
        #   to a previous request. Optional.
        # @param [String] alert_filter
        #   Requests only beacons that have the given alert. For example, to find beacons
        #   that have low batteries use `alert_filter=LOW_BATTERY`.
        # @param [String] project_id
        #   Requests only diagnostic records for the given project id. If not set, then
        #   the project making the request will be used for looking up diagnostic records.
        #   Optional.
        # @param [String] fields
        #   Selector specifying which fields to include in a partial response.
        # @param [String] quota_user
        #   Available to use for quota purposes for server-side applications. Can be any
        #   arbitrary string assigned to a user, but should not exceed 40 characters.
        # @param [Google::Apis::RequestOptions] options
        #   Request-specific options
        #
        # @yield [result, err] Result & error if block supplied
        # @yieldparam result [Google::Apis::ProximitybeaconV1beta1::ListDiagnosticsResponse] parsed result object
        # @yieldparam err [StandardError] error object if request failed
        #
        # @return [Google::Apis::ProximitybeaconV1beta1::ListDiagnosticsResponse]
        #
        # @raise [Google::Apis::ServerError] An error occurred on the server and the request can be retried
        # @raise [Google::Apis::ClientError] The request is invalid and should not be retried without modification
        # @raise [Google::Apis::AuthorizationError] Authorization is required
        def list_beacon_diagnostics(beacon_name, page_size: nil, page_token: nil, alert_filter: nil, project_id: nil, fields: nil, quota_user: nil, options: nil, &block)
          command =  make_simple_command(:get, 'v1beta1/{+beaconName}/diagnostics', options)
          command.response_representation = Google::Apis::ProximitybeaconV1beta1::ListDiagnosticsResponse::Representation
          command.response_class = Google::Apis::ProximitybeaconV1beta1::ListDiagnosticsResponse
          command.params['beaconName'] = beacon_name unless beacon_name.nil?
          command.query['pageSize'] = page_size unless page_size.nil?
          command.query['pageToken'] = page_token unless page_token.nil?
          command.query['alertFilter'] = alert_filter unless alert_filter.nil?
          command.query['projectId'] = project_id unless project_id.nil?
          command.query['fields'] = fields unless fields.nil?
          command.query['quotaUser'] = quota_user unless quota_user.nil?
          execute_or_queue_command(command, &block)
        end
        
        # Lists all attachment namespaces owned by your Google Developers Console
        # project. Attachment data associated with a beacon must include a namespaced
        # type, and the namespace must be owned by your project. Authenticate using an [
        # OAuth access token](https://developers.google.com/identity/protocols/OAuth2)
        # from a signed-in user with **viewer**, **Is owner** or **Can edit**
        # permissions in the Google Developers Console project.
        # @param [String] project_id
        #   The project id to list namespaces under. Optional.
        # @param [String] fields
        #   Selector specifying which fields to include in a partial response.
        # @param [String] quota_user
        #   Available to use for quota purposes for server-side applications. Can be any
        #   arbitrary string assigned to a user, but should not exceed 40 characters.
        # @param [Google::Apis::RequestOptions] options
        #   Request-specific options
        #
        # @yield [result, err] Result & error if block supplied
        # @yieldparam result [Google::Apis::ProximitybeaconV1beta1::ListNamespacesResponse] parsed result object
        # @yieldparam err [StandardError] error object if request failed
        #
        # @return [Google::Apis::ProximitybeaconV1beta1::ListNamespacesResponse]
        #
        # @raise [Google::Apis::ServerError] An error occurred on the server and the request can be retried
        # @raise [Google::Apis::ClientError] The request is invalid and should not be retried without modification
        # @raise [Google::Apis::AuthorizationError] Authorization is required
        def list_namespaces(project_id: nil, fields: nil, quota_user: nil, options: nil, &block)
          command =  make_simple_command(:get, 'v1beta1/namespaces', options)
          command.response_representation = Google::Apis::ProximitybeaconV1beta1::ListNamespacesResponse::Representation
          command.response_class = Google::Apis::ProximitybeaconV1beta1::ListNamespacesResponse
          command.query['projectId'] = project_id unless project_id.nil?
          command.query['fields'] = fields unless fields.nil?
          command.query['quotaUser'] = quota_user unless quota_user.nil?
          execute_or_queue_command(command, &block)
        end
        
        # Updates the information about the specified namespace. Only the namespace
        # visibility can be updated.
        # @param [String] namespace_name
        #   Resource name of this namespace. Namespaces names have the format: namespaces/
        #   namespace.
        # @param [Google::Apis::ProximitybeaconV1beta1::Namespace] namespace_object
        # @param [String] project_id
        #   The project id of the namespace to update. If the project id is not specified
        #   then the project making the request is used. The project id must match the
        #   project that owns the beacon. Optional.
        # @param [String] fields
        #   Selector specifying which fields to include in a partial response.
        # @param [String] quota_user
        #   Available to use for quota purposes for server-side applications. Can be any
        #   arbitrary string assigned to a user, but should not exceed 40 characters.
        # @param [Google::Apis::RequestOptions] options
        #   Request-specific options
        #
        # @yield [result, err] Result & error if block supplied
        # @yieldparam result [Google::Apis::ProximitybeaconV1beta1::Namespace] parsed result object
        # @yieldparam err [StandardError] error object if request failed
        #
        # @return [Google::Apis::ProximitybeaconV1beta1::Namespace]
        #
        # @raise [Google::Apis::ServerError] An error occurred on the server and the request can be retried
        # @raise [Google::Apis::ClientError] The request is invalid and should not be retried without modification
        # @raise [Google::Apis::AuthorizationError] Authorization is required
        def update_namespace(namespace_name, namespace_object = nil, project_id: nil, fields: nil, quota_user: nil, options: nil, &block)
          command =  make_simple_command(:put, 'v1beta1/{+namespaceName}', options)
          command.request_representation = Google::Apis::ProximitybeaconV1beta1::Namespace::Representation
          command.request_object = namespace_object
          command.response_representation = Google::Apis::ProximitybeaconV1beta1::Namespace::Representation
          command.response_class = Google::Apis::ProximitybeaconV1beta1::Namespace
          command.params['namespaceName'] = namespace_name unless namespace_name.nil?
          command.query['projectId'] = project_id unless project_id.nil?
          command.query['fields'] = fields unless fields.nil?
          command.query['quotaUser'] = quota_user unless quota_user.nil?
          execute_or_queue_command(command, &block)
        end
        
        # Gets the Proximity Beacon API's current public key and associated parameters
        # used to initiate the Diffie-Hellman key exchange required to register a beacon
        # that broadcasts the Eddystone-EID format. This key changes periodically;
        # clients may cache it and re-use the same public key to provision and register
        # multiple beacons. However, clients should be prepared to refresh this key when
        # they encounter an error registering an Eddystone-EID beacon.
        # @param [String] fields
        #   Selector specifying which fields to include in a partial response.
        # @param [String] quota_user
        #   Available to use for quota purposes for server-side applications. Can be any
        #   arbitrary string assigned to a user, but should not exceed 40 characters.
        # @param [Google::Apis::RequestOptions] options
        #   Request-specific options
        #
        # @yield [result, err] Result & error if block supplied
        # @yieldparam result [Google::Apis::ProximitybeaconV1beta1::EphemeralIdRegistrationParams] parsed result object
        # @yieldparam err [StandardError] error object if request failed
        #
        # @return [Google::Apis::ProximitybeaconV1beta1::EphemeralIdRegistrationParams]
        #
        # @raise [Google::Apis::ServerError] An error occurred on the server and the request can be retried
        # @raise [Google::Apis::ClientError] The request is invalid and should not be retried without modification
        # @raise [Google::Apis::AuthorizationError] Authorization is required
        def get_eidparams(fields: nil, quota_user: nil, options: nil, &block)
          command =  make_simple_command(:get, 'v1beta1/eidparams', options)
          command.response_representation = Google::Apis::ProximitybeaconV1beta1::EphemeralIdRegistrationParams::Representation
          command.response_class = Google::Apis::ProximitybeaconV1beta1::EphemeralIdRegistrationParams
          command.query['fields'] = fields unless fields.nil?
          command.query['quotaUser'] = quota_user unless quota_user.nil?
          execute_or_queue_command(command, &block)
        end
        
        # Given one or more beacon observations, returns any beacon information and
        # attachments accessible to your application. Authorize by using the [API key](
        # https://developers.google.com/beacons/proximity/how-tos/authorizing#APIKey)
        # for the application.
        # @param [Google::Apis::ProximitybeaconV1beta1::GetInfoForObservedBeaconsRequest] get_info_for_observed_beacons_request_object
        # @param [String] fields
        #   Selector specifying which fields to include in a partial response.
        # @param [String] quota_user
        #   Available to use for quota purposes for server-side applications. Can be any
        #   arbitrary string assigned to a user, but should not exceed 40 characters.
        # @param [Google::Apis::RequestOptions] options
        #   Request-specific options
        #
        # @yield [result, err] Result & error if block supplied
        # @yieldparam result [Google::Apis::ProximitybeaconV1beta1::GetInfoForObservedBeaconsResponse] parsed result object
        # @yieldparam err [StandardError] error object if request failed
        #
        # @return [Google::Apis::ProximitybeaconV1beta1::GetInfoForObservedBeaconsResponse]
        #
        # @raise [Google::Apis::ServerError] An error occurred on the server and the request can be retried
        # @raise [Google::Apis::ClientError] The request is invalid and should not be retried without modification
        # @raise [Google::Apis::AuthorizationError] Authorization is required
        def getforobserved_beaconinfo(get_info_for_observed_beacons_request_object = nil, fields: nil, quota_user: nil, options: nil, &block)
          command =  make_simple_command(:post, 'v1beta1/beaconinfo:getforobserved', options)
          command.request_representation = Google::Apis::ProximitybeaconV1beta1::GetInfoForObservedBeaconsRequest::Representation
          command.request_object = get_info_for_observed_beacons_request_object
          command.response_representation = Google::Apis::ProximitybeaconV1beta1::GetInfoForObservedBeaconsResponse::Representation
          command.response_class = Google::Apis::ProximitybeaconV1beta1::GetInfoForObservedBeaconsResponse
          command.query['fields'] = fields unless fields.nil?
          command.query['quotaUser'] = quota_user unless quota_user.nil?
          execute_or_queue_command(command, &block)
        end

        protected

        def apply_command_defaults(command)
          command.query['key'] = key unless key.nil?
          command.query['quotaUser'] = quota_user unless quota_user.nil?
        end
      end
    end
  end
end
