# encoding: utf-8
# Code generated by Microsoft (R) AutoRest Code Generator.
# Changes may cause incorrect behavior and will be lost if the code is
# regenerated.

module Azure::CognitiveServices::ImageSearch::V1_0
  #
  # The Image Search API lets you send a search query to Bing and get back a
  # list of relevant images. This section provides technical details about the
  # query parameters and headers that you use to request images and the JSON
  # response objects that contain them. For examples that show how to make
  # requests, see [Searching the Web for
  # Images](https://docs.microsoft.com/azure/cognitive-services/bing-image-search/search-the-web).
  #
  class ImagesOperations
    include MsRestAzure

    #
    # Creates and initializes a new instance of the ImagesOperations class.
    # @param client service class for accessing basic functionality.
    #
    def initialize(client)
      @client = client
    end

    # @return [ImageSearchClient] reference to the ImageSearchClient
    attr_reader :client

    #
    # The Image Search API lets you send a search query to Bing and get back a list
    # of relevant images. This section provides technical details about the query
    # parameters and headers that you use to request images and the JSON response
    # objects that contain them. For examples that show how to make requests, see
    # [Searching the Web for
    # Images](https://docs.microsoft.com/azure/cognitive-services/bing-image-search/search-the-web).
    #
    # @param query [String] The user's search query term. The term cannot be empty.
    # The term may contain [Bing Advanced
    # Operators](http://msdn.microsoft.com/library/ff795620.aspx). For example, to
    # limit images to a specific domain, use the
    # [site:](http://msdn.microsoft.com/library/ff795613.aspx) operator. To help
    # improve relevance of an insights query (see
    # [insightsToken](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#insightstoken)),
    # you should always include the user's query term. Use this parameter only with
    # the Image Search API.Do not specify this parameter when calling the Trending
    # Images API.
    # @param accept_language [String] A comma-delimited list of one or more
    # languages to use for user interface strings. The list is in decreasing order
    # of preference. For additional information, including expected format, see
    # [RFC2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html). This
    # header and the
    # [setLang](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#setlang)
    # query parameter are mutually exclusive; do not specify both. If you set this
    # header, you must also specify the
    # [cc](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#cc)
    # query parameter. To determine the market to return results for, Bing uses the
    # first supported language it finds from the list and combines it with the cc
    # parameter value. If the list does not include a supported language, Bing
    # finds the closest language and market that supports the request or it uses an
    # aggregated or default market for the results. To determine the market that
    # Bing used, see the BingAPIs-Market header. Use this header and the cc query
    # parameter only if you specify multiple languages. Otherwise, use the
    # [mkt](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#mkt)
    # and
    # [setLang](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#setlang)
    # query parameters. A user interface string is a string that's used as a label
    # in a user interface. There are few user interface strings in the JSON
    # response objects. Any links to Bing.com properties in the response objects
    # apply the specified language.
    # @param user_agent [String] The user agent originating the request. Bing uses
    # the user agent to provide mobile users with an optimized experience. Although
    # optional, you are encouraged to always specify this header. The user-agent
    # should be the same string that any commonly used browser sends. For
    # information about user agents, see [RFC
    # 2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html). The following
    # are examples of user-agent strings. Windows Phone: Mozilla/5.0 (compatible;
    # MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA;
    # Lumia 822). Android: Mozilla / 5.0 (Linux; U; Android 2.3.5; en - us; SCH -
    # I500 Build / GINGERBREAD) AppleWebKit / 533.1 (KHTML; like Gecko) Version /
    # 4.0 Mobile Safari / 533.1. iPhone: Mozilla / 5.0 (iPhone; CPU iPhone OS 6_1
    # like Mac OS X) AppleWebKit / 536.26 (KHTML; like Gecko) Mobile / 10B142
    # iPhone4; 1 BingWeb / 3.03.1428.20120423. PC: Mozilla / 5.0 (Windows NT 6.3;
    # WOW64; Trident / 7.0; Touch; rv:11.0) like Gecko. iPad: Mozilla / 5.0 (iPad;
    # CPU OS 7_0 like Mac OS X) AppleWebKit / 537.51.1 (KHTML, like Gecko) Version
    # / 7.0 Mobile / 11A465 Safari / 9537.53
    # @param client_id [String] Bing uses this header to provide users with
    # consistent behavior across Bing API calls. Bing often flights new features
    # and improvements, and it uses the client ID as a key for assigning traffic on
    # different flights. If you do not use the same client ID for a user across
    # multiple requests, then Bing may assign the user to multiple conflicting
    # flights. Being assigned to multiple conflicting flights can lead to an
    # inconsistent user experience. For example, if the second request has a
    # different flight assignment than the first, the experience may be unexpected.
    # Also, Bing can use the client ID to tailor web results to that client ID’s
    # search history, providing a richer experience for the user. Bing also uses
    # this header to help improve result rankings by analyzing the activity
    # generated by a client ID. The relevance improvements help with better quality
    # of results delivered by Bing APIs and in turn enables higher click-through
    # rates for the API consumer. IMPORTANT: Although optional, you should consider
    # this header required. Persisting the client ID across multiple requests for
    # the same end user and device combination enables 1) the API consumer to
    # receive a consistent user experience, and 2) higher click-through rates via
    # better quality of results from the Bing APIs. Each user that uses your
    # application on the device must have a unique, Bing generated client ID. If
    # you do not include this header in the request, Bing generates an ID and
    # returns it in the X-MSEdge-ClientID response header. The only time that you
    # should NOT include this header in a request is the first time the user uses
    # your app on that device. Use the client ID for each Bing API request that
    # your app makes for this user on the device. Persist the client ID. To persist
    # the ID in a browser app, use a persistent HTTP cookie to ensure the ID is
    # used across all sessions. Do not use a session cookie. For other apps such as
    # mobile apps, use the device's persistent storage to persist the ID. The next
    # time the user uses your app on that device, get the client ID that you
    # persisted. Bing responses may or may not include this header. If the response
    # includes this header, capture the client ID and use it for all subsequent
    # Bing requests for the user on that device. If you include the
    # X-MSEdge-ClientID, you must not include cookies in the request.
    # @param client_ip [String] The IPv4 or IPv6 address of the client device. The
    # IP address is used to discover the user's location. Bing uses the location
    # information to determine safe search behavior. Although optional, you are
    # encouraged to always specify this header and the X-Search-Location header. Do
    # not obfuscate the address (for example, by changing the last octet to 0).
    # Obfuscating the address results in the location not being anywhere near the
    # device's actual location, which may result in Bing serving erroneous results.
    # @param location [String] A semicolon-delimited list of key/value pairs that
    # describe the client's geographical location. Bing uses the location
    # information to determine safe search behavior and to return relevant local
    # content. Specify the key/value pair as <key>:<value>. The following are the
    # keys that you use to specify the user's location. lat (required): The
    # latitude of the client's location, in degrees. The latitude must be greater
    # than or equal to -90.0 and less than or equal to +90.0. Negative values
    # indicate southern latitudes and positive values indicate northern latitudes.
    # long (required): The longitude of the client's location, in degrees. The
    # longitude must be greater than or equal to -180.0 and less than or equal to
    # +180.0. Negative values indicate western longitudes and positive values
    # indicate eastern longitudes. re (required): The radius, in meters, which
    # specifies the horizontal accuracy of the coordinates. Pass the value returned
    # by the device's location service. Typical values might be 22m for GPS/Wi-Fi,
    # 380m for cell tower triangulation, and 18,000m for reverse IP lookup. ts
    # (optional): The UTC UNIX timestamp of when the client was at the location.
    # (The UNIX timestamp is the number of seconds since January 1, 1970.) head
    # (optional): The client's relative heading or direction of travel. Specify the
    # direction of travel as degrees from 0 through 360, counting clockwise
    # relative to true north. Specify this key only if the sp key is nonzero. sp
    # (optional): The horizontal velocity (speed), in meters per second, that the
    # client device is traveling. alt (optional): The altitude of the client
    # device, in meters. are (optional): The radius, in meters, that specifies the
    # vertical accuracy of the coordinates. Specify this key only if you specify
    # the alt key. Although many of the keys are optional, the more information
    # that you provide, the more accurate the location results are. Although
    # optional, you are encouraged to always specify the user's geographical
    # location. Providing the location is especially important if the client's IP
    # address does not accurately reflect the user's physical location (for
    # example, if the client uses VPN). For optimal results, you should include
    # this header and the X-MSEdge-ClientIP header, but at a minimum, you should
    # include this header.
    # @param aspect [ImageAspect] Filter images by the following aspect ratios.
    # All: Do not filter by aspect.Specifying this value is the same as not
    # specifying the aspect parameter. Square: Return images with standard aspect
    # ratio. Wide: Return images with wide screen aspect ratio. Tall: Return images
    # with tall aspect ratio. Possible values include: 'All', 'Square', 'Wide',
    # 'Tall'
    # @param color [ImageColor] Filter images by the following color options.
    # ColorOnly: Return color images. Monochrome: Return black and white images.
    # Return images with one of the following dominant colors: Black, Blue, Brown,
    # Gray, Green, Orange, Pink, Purple, Red, Teal, White, Yellow. Possible values
    # include: 'ColorOnly', 'Monochrome', 'Black', 'Blue', 'Brown', 'Gray',
    # 'Green', 'Orange', 'Pink', 'Purple', 'Red', 'Teal', 'White', 'Yellow'
    # @param country_code [String] A 2-character country code of the country where
    # the results come from. For a list of possible values, see [Market
    # Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#market-codes).
    # If you set this parameter, you must also specify the
    # [Accept-Language](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#acceptlanguage)
    # header. Bing uses the first supported language it finds from the languages
    # list, and combine that language with the country code that you specify to
    # determine the market to return results for. If the languages list does not
    # include a supported language, Bing finds the closest language and market that
    # supports the request, or it may use an aggregated or default market for the
    # results instead of a specified one. You should use this query parameter and
    # the Accept-Language query parameter only if you specify multiple languages;
    # otherwise, you should use the mkt and setLang query parameters. This
    # parameter and the
    # [mkt](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#mkt)
    # query parameter are mutually exclusive—do not specify both.
    # @param count [Integer] The number of images to return in the response. The
    # actual number delivered may be less than requested. The default is 35. The
    # maximum value is 150. You use this parameter along with the offset parameter
    # to page results.For example, if your user interface displays 20 images per
    # page, set count to 20 and offset to 0 to get the first page of results.For
    # each subsequent page, increment offset by 20 (for example, 0, 20, 40). Use
    # this parameter only with the Image Search API.Do not specify this parameter
    # when calling the Insights, Trending Images, or Web Search APIs.
    # @param freshness [Freshness] Filter images by the following discovery
    # options. Day: Return images discovered by Bing within the last 24 hours.
    # Week: Return images discovered by Bing within the last 7 days. Month: Return
    # images discovered by Bing within the last 30 days. Possible values include:
    # 'Day', 'Week', 'Month'
    # @param height [Integer] Filter images that have the specified height, in
    # pixels. You may use this filter with the size filter to return small images
    # that have a height of 150 pixels.
    # @param id [String] An ID that uniquely identifies an image. Use this
    # parameter to ensure that the specified image is the first image in the list
    # of images that Bing returns. The
    # [Image](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#image)
    # object's imageId field contains the ID that you set this parameter to.
    # @param image_content [ImageContent] Filter images by the following content
    # types. Face: Return images that show only a person's face. Portrait: Return
    # images that show only a person's head and shoulders. Possible values include:
    # 'Face', 'Portrait'
    # @param image_type [ImageType] Filter images by the following image types.
    # AnimatedGif: Return only animated GIFs. Clipart: Return only clip art images.
    # Line: Return only line drawings. Photo: Return only photographs(excluding
    # line drawings, animated Gifs, and clip art). Shopping: Return only images
    # that contain items where Bing knows of a merchant that is selling the items.
    # This option is valid in the en - US market only.Transparent: Return only
    # images with a transparent background. Possible values include: 'AnimatedGif',
    # 'Clipart', 'Line', 'Photo', 'Shopping', 'Transparent'
    # @param license [ImageLicense] Filter images by the following license types.
    # All: Do not filter by license type.Specifying this value is the same as not
    # specifying the license parameter. Any: Return images that are under any
    # license type. The response doesn't include images that do not specify a
    # license or the license is unknown. Public: Return images where the creator
    # has waived their exclusive rights, to the fullest extent allowed by law.
    # Share: Return images that may be shared with others. Changing or editing the
    # image might not be allowed. Also, modifying, sharing, and using the image for
    # commercial purposes might not be allowed. Typically, this option returns the
    # most images. ShareCommercially: Return images that may be shared with others
    # for personal or commercial purposes. Changing or editing the image might not
    # be allowed. Modify: Return images that may be modified, shared, and used.
    # Changing or editing the image might not be allowed. Modifying, sharing, and
    # using the image for commercial purposes might not be allowed.
    # ModifyCommercially: Return images that may be modified, shared, and used for
    # personal or commercial purposes. Typically, this option returns the fewest
    # images. For more information about these license types, see [Filter Images By
    # License Type](http://go.microsoft.com/fwlink/?LinkId=309768). Possible values
    # include: 'All', 'Any', 'Public', 'Share', 'ShareCommercially', 'Modify',
    # 'ModifyCommercially'
    # @param market [String] The market where the results come from. Typically, mkt
    # is the country where the user is making the request from. However, it could
    # be a different country if the user is not located in a country where Bing
    # delivers results. The market must be in the form <language code>-<country
    # code>. For example, en-US. The string is case insensitive. For a list of
    # possible market values, see [Market
    # Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#market-codes).
    # NOTE: If known, you are encouraged to always specify the market. Specifying
    # the market helps Bing route the request and return an appropriate and optimal
    # response. If you specify a market that is not listed in [Market
    # Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#market-codes),
    # Bing uses a best fit market code based on an internal mapping that is subject
    # to change. This parameter and the
    # [cc](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#cc)
    # query parameter are mutually exclusive—do not specify both.
    # @param max_file_size [Integer] Filter images that are less than or equal to
    # the specified file size. The maximum file size that you may specify is
    # 520,192 bytes. If you specify a larger value, the API uses 520,192. It is
    # possible that the response may include images that are slightly larger than
    # the specified maximum. You may specify this filter and minFileSize to filter
    # images within a range of file sizes.
    # @param max_height [Integer] Filter images that have a height that is less
    # than or equal to the specified height. Specify the height in pixels. You may
    # specify this filter and minHeight to filter images within a range of heights.
    # This filter and the height filter are mutually exclusive.
    # @param max_width [Integer] Filter images that have a width that is less than
    # or equal to the specified width. Specify the width in pixels. You may specify
    # this filter and maxWidth to filter images within a range of widths. This
    # filter and the width filter are mutually exclusive.
    # @param min_file_size [Integer] Filter images that are greater than or equal
    # to the specified file size. The maximum file size that you may specify is
    # 520,192 bytes. If you specify a larger value, the API uses 520,192. It is
    # possible that the response may include images that are slightly smaller than
    # the specified minimum. You may specify this filter and maxFileSize to filter
    # images within a range of file sizes.
    # @param min_height [Integer] Filter images that have a height that is greater
    # than or equal to the specified height. Specify the height in pixels. You may
    # specify this filter and maxHeight to filter images within a range of heights.
    # This filter and the height filter are mutually exclusive.
    # @param min_width [Integer] Filter images that have a width that is greater
    # than or equal to the specified width. Specify the width in pixels. You may
    # specify this filter and maxWidth to filter images within a range of widths.
    # This filter and the width filter are mutually exclusive.
    # @param offset [Integer] The zero-based offset that indicates the number of
    # images to skip before returning images. The default is 0. The offset should
    # be less than
    # ([totalEstimatedMatches](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#totalestimatedmatches)
    # - count). Use this parameter along with the count parameter to page results.
    # For example, if your user interface displays 20 images per page, set count to
    # 20 and offset to 0 to get the first page of results. For each subsequent
    # page, increment offset by 20 (for example, 0, 20, 40). It is possible for
    # multiple pages to include some overlap in results. To prevent duplicates, see
    # [nextOffset](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#nextoffset).
    # Use this parameter only with the Image API. Do not specify this parameter
    # when calling the Trending Images API or the Web Search API.
    # @param safe_search [SafeSearch] Filter images for adult content. The
    # following are the possible filter values. Off: May return images with adult
    # content. If the request is through the Image Search API, the response
    # includes thumbnail images that are clear (non-fuzzy). However, if the request
    # is through the Web Search API, the response includes thumbnail images that
    # are pixelated (fuzzy). Moderate: If the request is through the Image Search
    # API, the response doesn't include images with adult content. If the request
    # is through the Web Search API, the response may include images with adult
    # content (the thumbnail images are pixelated (fuzzy)). Strict: Do not return
    # images with adult content. The default is Moderate. If the request comes from
    # a market that Bing's adult policy requires that safeSearch is set to Strict,
    # Bing ignores the safeSearch value and uses Strict. If you use the site: query
    # operator, there is the chance that the response may contain adult content
    # regardless of what the safeSearch query parameter is set to. Use site: only
    # if you are aware of the content on the site and your scenario supports the
    # possibility of adult content. Possible values include: 'Off', 'Moderate',
    # 'Strict'
    # @param size [ImageSize] Filter images by the following sizes. All: Do not
    # filter by size. Specifying this value is the same as not specifying the size
    # parameter. Small: Return images that are less than 200x200 pixels. Medium:
    # Return images that are greater than or equal to 200x200 pixels but less than
    # 500x500 pixels. Large: Return images that are 500x500 pixels or larger.
    # Wallpaper: Return wallpaper images. You may use this parameter along with the
    # height or width parameters. For example, you may use height and size to
    # request small images that are 150 pixels tall. Possible values include:
    # 'All', 'Small', 'Medium', 'Large', 'Wallpaper'
    # @param set_lang [String] The language to use for user interface strings.
    # Specify the language using the ISO 639-1 2-letter language code. For example,
    # the language code for English is EN. The default is EN (English). Although
    # optional, you should always specify the language. Typically, you set setLang
    # to the same language specified by mkt unless the user wants the user
    # interface strings displayed in a different language. This parameter and the
    # [Accept-Language](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#acceptlanguage)
    # header are mutually exclusive; do not specify both. A user interface string
    # is a string that's used as a label in a user interface. There are few user
    # interface strings in the JSON response objects. Also, any links to Bing.com
    # properties in the response objects apply the specified language.
    # @param width [Integer] Filter images that have the specified width, in
    # pixels. You may use this filter with the size filter to return small images
    # that have a width of 150 pixels.
    # @param custom_headers [Hash{String => String}] A hash of custom headers that
    # will be added to the HTTP request.
    #
    # @return [Images] operation results.
    #
    def search(query, accept_language:nil, user_agent:nil, client_id:nil, client_ip:nil, location:nil, aspect:nil, color:nil, country_code:nil, count:nil, freshness:nil, height:nil, id:nil, image_content:nil, image_type:nil, license:nil, market:nil, max_file_size:nil, max_height:nil, max_width:nil, min_file_size:nil, min_height:nil, min_width:nil, offset:nil, safe_search:nil, size:nil, set_lang:nil, width:nil, custom_headers:nil)
      response = search_async(query, accept_language:accept_language, user_agent:user_agent, client_id:client_id, client_ip:client_ip, location:location, aspect:aspect, color:color, country_code:country_code, count:count, freshness:freshness, height:height, id:id, image_content:image_content, image_type:image_type, license:license, market:market, max_file_size:max_file_size, max_height:max_height, max_width:max_width, min_file_size:min_file_size, min_height:min_height, min_width:min_width, offset:offset, safe_search:safe_search, size:size, set_lang:set_lang, width:width, custom_headers:custom_headers).value!
      response.body unless response.nil?
    end

    #
    # The Image Search API lets you send a search query to Bing and get back a list
    # of relevant images. This section provides technical details about the query
    # parameters and headers that you use to request images and the JSON response
    # objects that contain them. For examples that show how to make requests, see
    # [Searching the Web for
    # Images](https://docs.microsoft.com/azure/cognitive-services/bing-image-search/search-the-web).
    #
    # @param query [String] The user's search query term. The term cannot be empty.
    # The term may contain [Bing Advanced
    # Operators](http://msdn.microsoft.com/library/ff795620.aspx). For example, to
    # limit images to a specific domain, use the
    # [site:](http://msdn.microsoft.com/library/ff795613.aspx) operator. To help
    # improve relevance of an insights query (see
    # [insightsToken](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#insightstoken)),
    # you should always include the user's query term. Use this parameter only with
    # the Image Search API.Do not specify this parameter when calling the Trending
    # Images API.
    # @param accept_language [String] A comma-delimited list of one or more
    # languages to use for user interface strings. The list is in decreasing order
    # of preference. For additional information, including expected format, see
    # [RFC2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html). This
    # header and the
    # [setLang](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#setlang)
    # query parameter are mutually exclusive; do not specify both. If you set this
    # header, you must also specify the
    # [cc](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#cc)
    # query parameter. To determine the market to return results for, Bing uses the
    # first supported language it finds from the list and combines it with the cc
    # parameter value. If the list does not include a supported language, Bing
    # finds the closest language and market that supports the request or it uses an
    # aggregated or default market for the results. To determine the market that
    # Bing used, see the BingAPIs-Market header. Use this header and the cc query
    # parameter only if you specify multiple languages. Otherwise, use the
    # [mkt](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#mkt)
    # and
    # [setLang](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#setlang)
    # query parameters. A user interface string is a string that's used as a label
    # in a user interface. There are few user interface strings in the JSON
    # response objects. Any links to Bing.com properties in the response objects
    # apply the specified language.
    # @param user_agent [String] The user agent originating the request. Bing uses
    # the user agent to provide mobile users with an optimized experience. Although
    # optional, you are encouraged to always specify this header. The user-agent
    # should be the same string that any commonly used browser sends. For
    # information about user agents, see [RFC
    # 2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html). The following
    # are examples of user-agent strings. Windows Phone: Mozilla/5.0 (compatible;
    # MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA;
    # Lumia 822). Android: Mozilla / 5.0 (Linux; U; Android 2.3.5; en - us; SCH -
    # I500 Build / GINGERBREAD) AppleWebKit / 533.1 (KHTML; like Gecko) Version /
    # 4.0 Mobile Safari / 533.1. iPhone: Mozilla / 5.0 (iPhone; CPU iPhone OS 6_1
    # like Mac OS X) AppleWebKit / 536.26 (KHTML; like Gecko) Mobile / 10B142
    # iPhone4; 1 BingWeb / 3.03.1428.20120423. PC: Mozilla / 5.0 (Windows NT 6.3;
    # WOW64; Trident / 7.0; Touch; rv:11.0) like Gecko. iPad: Mozilla / 5.0 (iPad;
    # CPU OS 7_0 like Mac OS X) AppleWebKit / 537.51.1 (KHTML, like Gecko) Version
    # / 7.0 Mobile / 11A465 Safari / 9537.53
    # @param client_id [String] Bing uses this header to provide users with
    # consistent behavior across Bing API calls. Bing often flights new features
    # and improvements, and it uses the client ID as a key for assigning traffic on
    # different flights. If you do not use the same client ID for a user across
    # multiple requests, then Bing may assign the user to multiple conflicting
    # flights. Being assigned to multiple conflicting flights can lead to an
    # inconsistent user experience. For example, if the second request has a
    # different flight assignment than the first, the experience may be unexpected.
    # Also, Bing can use the client ID to tailor web results to that client ID’s
    # search history, providing a richer experience for the user. Bing also uses
    # this header to help improve result rankings by analyzing the activity
    # generated by a client ID. The relevance improvements help with better quality
    # of results delivered by Bing APIs and in turn enables higher click-through
    # rates for the API consumer. IMPORTANT: Although optional, you should consider
    # this header required. Persisting the client ID across multiple requests for
    # the same end user and device combination enables 1) the API consumer to
    # receive a consistent user experience, and 2) higher click-through rates via
    # better quality of results from the Bing APIs. Each user that uses your
    # application on the device must have a unique, Bing generated client ID. If
    # you do not include this header in the request, Bing generates an ID and
    # returns it in the X-MSEdge-ClientID response header. The only time that you
    # should NOT include this header in a request is the first time the user uses
    # your app on that device. Use the client ID for each Bing API request that
    # your app makes for this user on the device. Persist the client ID. To persist
    # the ID in a browser app, use a persistent HTTP cookie to ensure the ID is
    # used across all sessions. Do not use a session cookie. For other apps such as
    # mobile apps, use the device's persistent storage to persist the ID. The next
    # time the user uses your app on that device, get the client ID that you
    # persisted. Bing responses may or may not include this header. If the response
    # includes this header, capture the client ID and use it for all subsequent
    # Bing requests for the user on that device. If you include the
    # X-MSEdge-ClientID, you must not include cookies in the request.
    # @param client_ip [String] The IPv4 or IPv6 address of the client device. The
    # IP address is used to discover the user's location. Bing uses the location
    # information to determine safe search behavior. Although optional, you are
    # encouraged to always specify this header and the X-Search-Location header. Do
    # not obfuscate the address (for example, by changing the last octet to 0).
    # Obfuscating the address results in the location not being anywhere near the
    # device's actual location, which may result in Bing serving erroneous results.
    # @param location [String] A semicolon-delimited list of key/value pairs that
    # describe the client's geographical location. Bing uses the location
    # information to determine safe search behavior and to return relevant local
    # content. Specify the key/value pair as <key>:<value>. The following are the
    # keys that you use to specify the user's location. lat (required): The
    # latitude of the client's location, in degrees. The latitude must be greater
    # than or equal to -90.0 and less than or equal to +90.0. Negative values
    # indicate southern latitudes and positive values indicate northern latitudes.
    # long (required): The longitude of the client's location, in degrees. The
    # longitude must be greater than or equal to -180.0 and less than or equal to
    # +180.0. Negative values indicate western longitudes and positive values
    # indicate eastern longitudes. re (required): The radius, in meters, which
    # specifies the horizontal accuracy of the coordinates. Pass the value returned
    # by the device's location service. Typical values might be 22m for GPS/Wi-Fi,
    # 380m for cell tower triangulation, and 18,000m for reverse IP lookup. ts
    # (optional): The UTC UNIX timestamp of when the client was at the location.
    # (The UNIX timestamp is the number of seconds since January 1, 1970.) head
    # (optional): The client's relative heading or direction of travel. Specify the
    # direction of travel as degrees from 0 through 360, counting clockwise
    # relative to true north. Specify this key only if the sp key is nonzero. sp
    # (optional): The horizontal velocity (speed), in meters per second, that the
    # client device is traveling. alt (optional): The altitude of the client
    # device, in meters. are (optional): The radius, in meters, that specifies the
    # vertical accuracy of the coordinates. Specify this key only if you specify
    # the alt key. Although many of the keys are optional, the more information
    # that you provide, the more accurate the location results are. Although
    # optional, you are encouraged to always specify the user's geographical
    # location. Providing the location is especially important if the client's IP
    # address does not accurately reflect the user's physical location (for
    # example, if the client uses VPN). For optimal results, you should include
    # this header and the X-MSEdge-ClientIP header, but at a minimum, you should
    # include this header.
    # @param aspect [ImageAspect] Filter images by the following aspect ratios.
    # All: Do not filter by aspect.Specifying this value is the same as not
    # specifying the aspect parameter. Square: Return images with standard aspect
    # ratio. Wide: Return images with wide screen aspect ratio. Tall: Return images
    # with tall aspect ratio. Possible values include: 'All', 'Square', 'Wide',
    # 'Tall'
    # @param color [ImageColor] Filter images by the following color options.
    # ColorOnly: Return color images. Monochrome: Return black and white images.
    # Return images with one of the following dominant colors: Black, Blue, Brown,
    # Gray, Green, Orange, Pink, Purple, Red, Teal, White, Yellow. Possible values
    # include: 'ColorOnly', 'Monochrome', 'Black', 'Blue', 'Brown', 'Gray',
    # 'Green', 'Orange', 'Pink', 'Purple', 'Red', 'Teal', 'White', 'Yellow'
    # @param country_code [String] A 2-character country code of the country where
    # the results come from. For a list of possible values, see [Market
    # Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#market-codes).
    # If you set this parameter, you must also specify the
    # [Accept-Language](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#acceptlanguage)
    # header. Bing uses the first supported language it finds from the languages
    # list, and combine that language with the country code that you specify to
    # determine the market to return results for. If the languages list does not
    # include a supported language, Bing finds the closest language and market that
    # supports the request, or it may use an aggregated or default market for the
    # results instead of a specified one. You should use this query parameter and
    # the Accept-Language query parameter only if you specify multiple languages;
    # otherwise, you should use the mkt and setLang query parameters. This
    # parameter and the
    # [mkt](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#mkt)
    # query parameter are mutually exclusive—do not specify both.
    # @param count [Integer] The number of images to return in the response. The
    # actual number delivered may be less than requested. The default is 35. The
    # maximum value is 150. You use this parameter along with the offset parameter
    # to page results.For example, if your user interface displays 20 images per
    # page, set count to 20 and offset to 0 to get the first page of results.For
    # each subsequent page, increment offset by 20 (for example, 0, 20, 40). Use
    # this parameter only with the Image Search API.Do not specify this parameter
    # when calling the Insights, Trending Images, or Web Search APIs.
    # @param freshness [Freshness] Filter images by the following discovery
    # options. Day: Return images discovered by Bing within the last 24 hours.
    # Week: Return images discovered by Bing within the last 7 days. Month: Return
    # images discovered by Bing within the last 30 days. Possible values include:
    # 'Day', 'Week', 'Month'
    # @param height [Integer] Filter images that have the specified height, in
    # pixels. You may use this filter with the size filter to return small images
    # that have a height of 150 pixels.
    # @param id [String] An ID that uniquely identifies an image. Use this
    # parameter to ensure that the specified image is the first image in the list
    # of images that Bing returns. The
    # [Image](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#image)
    # object's imageId field contains the ID that you set this parameter to.
    # @param image_content [ImageContent] Filter images by the following content
    # types. Face: Return images that show only a person's face. Portrait: Return
    # images that show only a person's head and shoulders. Possible values include:
    # 'Face', 'Portrait'
    # @param image_type [ImageType] Filter images by the following image types.
    # AnimatedGif: Return only animated GIFs. Clipart: Return only clip art images.
    # Line: Return only line drawings. Photo: Return only photographs(excluding
    # line drawings, animated Gifs, and clip art). Shopping: Return only images
    # that contain items where Bing knows of a merchant that is selling the items.
    # This option is valid in the en - US market only.Transparent: Return only
    # images with a transparent background. Possible values include: 'AnimatedGif',
    # 'Clipart', 'Line', 'Photo', 'Shopping', 'Transparent'
    # @param license [ImageLicense] Filter images by the following license types.
    # All: Do not filter by license type.Specifying this value is the same as not
    # specifying the license parameter. Any: Return images that are under any
    # license type. The response doesn't include images that do not specify a
    # license or the license is unknown. Public: Return images where the creator
    # has waived their exclusive rights, to the fullest extent allowed by law.
    # Share: Return images that may be shared with others. Changing or editing the
    # image might not be allowed. Also, modifying, sharing, and using the image for
    # commercial purposes might not be allowed. Typically, this option returns the
    # most images. ShareCommercially: Return images that may be shared with others
    # for personal or commercial purposes. Changing or editing the image might not
    # be allowed. Modify: Return images that may be modified, shared, and used.
    # Changing or editing the image might not be allowed. Modifying, sharing, and
    # using the image for commercial purposes might not be allowed.
    # ModifyCommercially: Return images that may be modified, shared, and used for
    # personal or commercial purposes. Typically, this option returns the fewest
    # images. For more information about these license types, see [Filter Images By
    # License Type](http://go.microsoft.com/fwlink/?LinkId=309768). Possible values
    # include: 'All', 'Any', 'Public', 'Share', 'ShareCommercially', 'Modify',
    # 'ModifyCommercially'
    # @param market [String] The market where the results come from. Typically, mkt
    # is the country where the user is making the request from. However, it could
    # be a different country if the user is not located in a country where Bing
    # delivers results. The market must be in the form <language code>-<country
    # code>. For example, en-US. The string is case insensitive. For a list of
    # possible market values, see [Market
    # Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#market-codes).
    # NOTE: If known, you are encouraged to always specify the market. Specifying
    # the market helps Bing route the request and return an appropriate and optimal
    # response. If you specify a market that is not listed in [Market
    # Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#market-codes),
    # Bing uses a best fit market code based on an internal mapping that is subject
    # to change. This parameter and the
    # [cc](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#cc)
    # query parameter are mutually exclusive—do not specify both.
    # @param max_file_size [Integer] Filter images that are less than or equal to
    # the specified file size. The maximum file size that you may specify is
    # 520,192 bytes. If you specify a larger value, the API uses 520,192. It is
    # possible that the response may include images that are slightly larger than
    # the specified maximum. You may specify this filter and minFileSize to filter
    # images within a range of file sizes.
    # @param max_height [Integer] Filter images that have a height that is less
    # than or equal to the specified height. Specify the height in pixels. You may
    # specify this filter and minHeight to filter images within a range of heights.
    # This filter and the height filter are mutually exclusive.
    # @param max_width [Integer] Filter images that have a width that is less than
    # or equal to the specified width. Specify the width in pixels. You may specify
    # this filter and maxWidth to filter images within a range of widths. This
    # filter and the width filter are mutually exclusive.
    # @param min_file_size [Integer] Filter images that are greater than or equal
    # to the specified file size. The maximum file size that you may specify is
    # 520,192 bytes. If you specify a larger value, the API uses 520,192. It is
    # possible that the response may include images that are slightly smaller than
    # the specified minimum. You may specify this filter and maxFileSize to filter
    # images within a range of file sizes.
    # @param min_height [Integer] Filter images that have a height that is greater
    # than or equal to the specified height. Specify the height in pixels. You may
    # specify this filter and maxHeight to filter images within a range of heights.
    # This filter and the height filter are mutually exclusive.
    # @param min_width [Integer] Filter images that have a width that is greater
    # than or equal to the specified width. Specify the width in pixels. You may
    # specify this filter and maxWidth to filter images within a range of widths.
    # This filter and the width filter are mutually exclusive.
    # @param offset [Integer] The zero-based offset that indicates the number of
    # images to skip before returning images. The default is 0. The offset should
    # be less than
    # ([totalEstimatedMatches](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#totalestimatedmatches)
    # - count). Use this parameter along with the count parameter to page results.
    # For example, if your user interface displays 20 images per page, set count to
    # 20 and offset to 0 to get the first page of results. For each subsequent
    # page, increment offset by 20 (for example, 0, 20, 40). It is possible for
    # multiple pages to include some overlap in results. To prevent duplicates, see
    # [nextOffset](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#nextoffset).
    # Use this parameter only with the Image API. Do not specify this parameter
    # when calling the Trending Images API or the Web Search API.
    # @param safe_search [SafeSearch] Filter images for adult content. The
    # following are the possible filter values. Off: May return images with adult
    # content. If the request is through the Image Search API, the response
    # includes thumbnail images that are clear (non-fuzzy). However, if the request
    # is through the Web Search API, the response includes thumbnail images that
    # are pixelated (fuzzy). Moderate: If the request is through the Image Search
    # API, the response doesn't include images with adult content. If the request
    # is through the Web Search API, the response may include images with adult
    # content (the thumbnail images are pixelated (fuzzy)). Strict: Do not return
    # images with adult content. The default is Moderate. If the request comes from
    # a market that Bing's adult policy requires that safeSearch is set to Strict,
    # Bing ignores the safeSearch value and uses Strict. If you use the site: query
    # operator, there is the chance that the response may contain adult content
    # regardless of what the safeSearch query parameter is set to. Use site: only
    # if you are aware of the content on the site and your scenario supports the
    # possibility of adult content. Possible values include: 'Off', 'Moderate',
    # 'Strict'
    # @param size [ImageSize] Filter images by the following sizes. All: Do not
    # filter by size. Specifying this value is the same as not specifying the size
    # parameter. Small: Return images that are less than 200x200 pixels. Medium:
    # Return images that are greater than or equal to 200x200 pixels but less than
    # 500x500 pixels. Large: Return images that are 500x500 pixels or larger.
    # Wallpaper: Return wallpaper images. You may use this parameter along with the
    # height or width parameters. For example, you may use height and size to
    # request small images that are 150 pixels tall. Possible values include:
    # 'All', 'Small', 'Medium', 'Large', 'Wallpaper'
    # @param set_lang [String] The language to use for user interface strings.
    # Specify the language using the ISO 639-1 2-letter language code. For example,
    # the language code for English is EN. The default is EN (English). Although
    # optional, you should always specify the language. Typically, you set setLang
    # to the same language specified by mkt unless the user wants the user
    # interface strings displayed in a different language. This parameter and the
    # [Accept-Language](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#acceptlanguage)
    # header are mutually exclusive; do not specify both. A user interface string
    # is a string that's used as a label in a user interface. There are few user
    # interface strings in the JSON response objects. Also, any links to Bing.com
    # properties in the response objects apply the specified language.
    # @param width [Integer] Filter images that have the specified width, in
    # pixels. You may use this filter with the size filter to return small images
    # that have a width of 150 pixels.
    # @param custom_headers [Hash{String => String}] A hash of custom headers that
    # will be added to the HTTP request.
    #
    # @return [MsRestAzure::AzureOperationResponse] HTTP response information.
    #
    def search_with_http_info(query, accept_language:nil, user_agent:nil, client_id:nil, client_ip:nil, location:nil, aspect:nil, color:nil, country_code:nil, count:nil, freshness:nil, height:nil, id:nil, image_content:nil, image_type:nil, license:nil, market:nil, max_file_size:nil, max_height:nil, max_width:nil, min_file_size:nil, min_height:nil, min_width:nil, offset:nil, safe_search:nil, size:nil, set_lang:nil, width:nil, custom_headers:nil)
      search_async(query, accept_language:accept_language, user_agent:user_agent, client_id:client_id, client_ip:client_ip, location:location, aspect:aspect, color:color, country_code:country_code, count:count, freshness:freshness, height:height, id:id, image_content:image_content, image_type:image_type, license:license, market:market, max_file_size:max_file_size, max_height:max_height, max_width:max_width, min_file_size:min_file_size, min_height:min_height, min_width:min_width, offset:offset, safe_search:safe_search, size:size, set_lang:set_lang, width:width, custom_headers:custom_headers).value!
    end

    #
    # The Image Search API lets you send a search query to Bing and get back a list
    # of relevant images. This section provides technical details about the query
    # parameters and headers that you use to request images and the JSON response
    # objects that contain them. For examples that show how to make requests, see
    # [Searching the Web for
    # Images](https://docs.microsoft.com/azure/cognitive-services/bing-image-search/search-the-web).
    #
    # @param query [String] The user's search query term. The term cannot be empty.
    # The term may contain [Bing Advanced
    # Operators](http://msdn.microsoft.com/library/ff795620.aspx). For example, to
    # limit images to a specific domain, use the
    # [site:](http://msdn.microsoft.com/library/ff795613.aspx) operator. To help
    # improve relevance of an insights query (see
    # [insightsToken](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#insightstoken)),
    # you should always include the user's query term. Use this parameter only with
    # the Image Search API.Do not specify this parameter when calling the Trending
    # Images API.
    # @param accept_language [String] A comma-delimited list of one or more
    # languages to use for user interface strings. The list is in decreasing order
    # of preference. For additional information, including expected format, see
    # [RFC2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html). This
    # header and the
    # [setLang](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#setlang)
    # query parameter are mutually exclusive; do not specify both. If you set this
    # header, you must also specify the
    # [cc](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#cc)
    # query parameter. To determine the market to return results for, Bing uses the
    # first supported language it finds from the list and combines it with the cc
    # parameter value. If the list does not include a supported language, Bing
    # finds the closest language and market that supports the request or it uses an
    # aggregated or default market for the results. To determine the market that
    # Bing used, see the BingAPIs-Market header. Use this header and the cc query
    # parameter only if you specify multiple languages. Otherwise, use the
    # [mkt](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#mkt)
    # and
    # [setLang](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#setlang)
    # query parameters. A user interface string is a string that's used as a label
    # in a user interface. There are few user interface strings in the JSON
    # response objects. Any links to Bing.com properties in the response objects
    # apply the specified language.
    # @param user_agent [String] The user agent originating the request. Bing uses
    # the user agent to provide mobile users with an optimized experience. Although
    # optional, you are encouraged to always specify this header. The user-agent
    # should be the same string that any commonly used browser sends. For
    # information about user agents, see [RFC
    # 2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html). The following
    # are examples of user-agent strings. Windows Phone: Mozilla/5.0 (compatible;
    # MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA;
    # Lumia 822). Android: Mozilla / 5.0 (Linux; U; Android 2.3.5; en - us; SCH -
    # I500 Build / GINGERBREAD) AppleWebKit / 533.1 (KHTML; like Gecko) Version /
    # 4.0 Mobile Safari / 533.1. iPhone: Mozilla / 5.0 (iPhone; CPU iPhone OS 6_1
    # like Mac OS X) AppleWebKit / 536.26 (KHTML; like Gecko) Mobile / 10B142
    # iPhone4; 1 BingWeb / 3.03.1428.20120423. PC: Mozilla / 5.0 (Windows NT 6.3;
    # WOW64; Trident / 7.0; Touch; rv:11.0) like Gecko. iPad: Mozilla / 5.0 (iPad;
    # CPU OS 7_0 like Mac OS X) AppleWebKit / 537.51.1 (KHTML, like Gecko) Version
    # / 7.0 Mobile / 11A465 Safari / 9537.53
    # @param client_id [String] Bing uses this header to provide users with
    # consistent behavior across Bing API calls. Bing often flights new features
    # and improvements, and it uses the client ID as a key for assigning traffic on
    # different flights. If you do not use the same client ID for a user across
    # multiple requests, then Bing may assign the user to multiple conflicting
    # flights. Being assigned to multiple conflicting flights can lead to an
    # inconsistent user experience. For example, if the second request has a
    # different flight assignment than the first, the experience may be unexpected.
    # Also, Bing can use the client ID to tailor web results to that client ID’s
    # search history, providing a richer experience for the user. Bing also uses
    # this header to help improve result rankings by analyzing the activity
    # generated by a client ID. The relevance improvements help with better quality
    # of results delivered by Bing APIs and in turn enables higher click-through
    # rates for the API consumer. IMPORTANT: Although optional, you should consider
    # this header required. Persisting the client ID across multiple requests for
    # the same end user and device combination enables 1) the API consumer to
    # receive a consistent user experience, and 2) higher click-through rates via
    # better quality of results from the Bing APIs. Each user that uses your
    # application on the device must have a unique, Bing generated client ID. If
    # you do not include this header in the request, Bing generates an ID and
    # returns it in the X-MSEdge-ClientID response header. The only time that you
    # should NOT include this header in a request is the first time the user uses
    # your app on that device. Use the client ID for each Bing API request that
    # your app makes for this user on the device. Persist the client ID. To persist
    # the ID in a browser app, use a persistent HTTP cookie to ensure the ID is
    # used across all sessions. Do not use a session cookie. For other apps such as
    # mobile apps, use the device's persistent storage to persist the ID. The next
    # time the user uses your app on that device, get the client ID that you
    # persisted. Bing responses may or may not include this header. If the response
    # includes this header, capture the client ID and use it for all subsequent
    # Bing requests for the user on that device. If you include the
    # X-MSEdge-ClientID, you must not include cookies in the request.
    # @param client_ip [String] The IPv4 or IPv6 address of the client device. The
    # IP address is used to discover the user's location. Bing uses the location
    # information to determine safe search behavior. Although optional, you are
    # encouraged to always specify this header and the X-Search-Location header. Do
    # not obfuscate the address (for example, by changing the last octet to 0).
    # Obfuscating the address results in the location not being anywhere near the
    # device's actual location, which may result in Bing serving erroneous results.
    # @param location [String] A semicolon-delimited list of key/value pairs that
    # describe the client's geographical location. Bing uses the location
    # information to determine safe search behavior and to return relevant local
    # content. Specify the key/value pair as <key>:<value>. The following are the
    # keys that you use to specify the user's location. lat (required): The
    # latitude of the client's location, in degrees. The latitude must be greater
    # than or equal to -90.0 and less than or equal to +90.0. Negative values
    # indicate southern latitudes and positive values indicate northern latitudes.
    # long (required): The longitude of the client's location, in degrees. The
    # longitude must be greater than or equal to -180.0 and less than or equal to
    # +180.0. Negative values indicate western longitudes and positive values
    # indicate eastern longitudes. re (required): The radius, in meters, which
    # specifies the horizontal accuracy of the coordinates. Pass the value returned
    # by the device's location service. Typical values might be 22m for GPS/Wi-Fi,
    # 380m for cell tower triangulation, and 18,000m for reverse IP lookup. ts
    # (optional): The UTC UNIX timestamp of when the client was at the location.
    # (The UNIX timestamp is the number of seconds since January 1, 1970.) head
    # (optional): The client's relative heading or direction of travel. Specify the
    # direction of travel as degrees from 0 through 360, counting clockwise
    # relative to true north. Specify this key only if the sp key is nonzero. sp
    # (optional): The horizontal velocity (speed), in meters per second, that the
    # client device is traveling. alt (optional): The altitude of the client
    # device, in meters. are (optional): The radius, in meters, that specifies the
    # vertical accuracy of the coordinates. Specify this key only if you specify
    # the alt key. Although many of the keys are optional, the more information
    # that you provide, the more accurate the location results are. Although
    # optional, you are encouraged to always specify the user's geographical
    # location. Providing the location is especially important if the client's IP
    # address does not accurately reflect the user's physical location (for
    # example, if the client uses VPN). For optimal results, you should include
    # this header and the X-MSEdge-ClientIP header, but at a minimum, you should
    # include this header.
    # @param aspect [ImageAspect] Filter images by the following aspect ratios.
    # All: Do not filter by aspect.Specifying this value is the same as not
    # specifying the aspect parameter. Square: Return images with standard aspect
    # ratio. Wide: Return images with wide screen aspect ratio. Tall: Return images
    # with tall aspect ratio. Possible values include: 'All', 'Square', 'Wide',
    # 'Tall'
    # @param color [ImageColor] Filter images by the following color options.
    # ColorOnly: Return color images. Monochrome: Return black and white images.
    # Return images with one of the following dominant colors: Black, Blue, Brown,
    # Gray, Green, Orange, Pink, Purple, Red, Teal, White, Yellow. Possible values
    # include: 'ColorOnly', 'Monochrome', 'Black', 'Blue', 'Brown', 'Gray',
    # 'Green', 'Orange', 'Pink', 'Purple', 'Red', 'Teal', 'White', 'Yellow'
    # @param country_code [String] A 2-character country code of the country where
    # the results come from. For a list of possible values, see [Market
    # Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#market-codes).
    # If you set this parameter, you must also specify the
    # [Accept-Language](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#acceptlanguage)
    # header. Bing uses the first supported language it finds from the languages
    # list, and combine that language with the country code that you specify to
    # determine the market to return results for. If the languages list does not
    # include a supported language, Bing finds the closest language and market that
    # supports the request, or it may use an aggregated or default market for the
    # results instead of a specified one. You should use this query parameter and
    # the Accept-Language query parameter only if you specify multiple languages;
    # otherwise, you should use the mkt and setLang query parameters. This
    # parameter and the
    # [mkt](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#mkt)
    # query parameter are mutually exclusive—do not specify both.
    # @param count [Integer] The number of images to return in the response. The
    # actual number delivered may be less than requested. The default is 35. The
    # maximum value is 150. You use this parameter along with the offset parameter
    # to page results.For example, if your user interface displays 20 images per
    # page, set count to 20 and offset to 0 to get the first page of results.For
    # each subsequent page, increment offset by 20 (for example, 0, 20, 40). Use
    # this parameter only with the Image Search API.Do not specify this parameter
    # when calling the Insights, Trending Images, or Web Search APIs.
    # @param freshness [Freshness] Filter images by the following discovery
    # options. Day: Return images discovered by Bing within the last 24 hours.
    # Week: Return images discovered by Bing within the last 7 days. Month: Return
    # images discovered by Bing within the last 30 days. Possible values include:
    # 'Day', 'Week', 'Month'
    # @param height [Integer] Filter images that have the specified height, in
    # pixels. You may use this filter with the size filter to return small images
    # that have a height of 150 pixels.
    # @param id [String] An ID that uniquely identifies an image. Use this
    # parameter to ensure that the specified image is the first image in the list
    # of images that Bing returns. The
    # [Image](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#image)
    # object's imageId field contains the ID that you set this parameter to.
    # @param image_content [ImageContent] Filter images by the following content
    # types. Face: Return images that show only a person's face. Portrait: Return
    # images that show only a person's head and shoulders. Possible values include:
    # 'Face', 'Portrait'
    # @param image_type [ImageType] Filter images by the following image types.
    # AnimatedGif: Return only animated GIFs. Clipart: Return only clip art images.
    # Line: Return only line drawings. Photo: Return only photographs(excluding
    # line drawings, animated Gifs, and clip art). Shopping: Return only images
    # that contain items where Bing knows of a merchant that is selling the items.
    # This option is valid in the en - US market only.Transparent: Return only
    # images with a transparent background. Possible values include: 'AnimatedGif',
    # 'Clipart', 'Line', 'Photo', 'Shopping', 'Transparent'
    # @param license [ImageLicense] Filter images by the following license types.
    # All: Do not filter by license type.Specifying this value is the same as not
    # specifying the license parameter. Any: Return images that are under any
    # license type. The response doesn't include images that do not specify a
    # license or the license is unknown. Public: Return images where the creator
    # has waived their exclusive rights, to the fullest extent allowed by law.
    # Share: Return images that may be shared with others. Changing or editing the
    # image might not be allowed. Also, modifying, sharing, and using the image for
    # commercial purposes might not be allowed. Typically, this option returns the
    # most images. ShareCommercially: Return images that may be shared with others
    # for personal or commercial purposes. Changing or editing the image might not
    # be allowed. Modify: Return images that may be modified, shared, and used.
    # Changing or editing the image might not be allowed. Modifying, sharing, and
    # using the image for commercial purposes might not be allowed.
    # ModifyCommercially: Return images that may be modified, shared, and used for
    # personal or commercial purposes. Typically, this option returns the fewest
    # images. For more information about these license types, see [Filter Images By
    # License Type](http://go.microsoft.com/fwlink/?LinkId=309768). Possible values
    # include: 'All', 'Any', 'Public', 'Share', 'ShareCommercially', 'Modify',
    # 'ModifyCommercially'
    # @param market [String] The market where the results come from. Typically, mkt
    # is the country where the user is making the request from. However, it could
    # be a different country if the user is not located in a country where Bing
    # delivers results. The market must be in the form <language code>-<country
    # code>. For example, en-US. The string is case insensitive. For a list of
    # possible market values, see [Market
    # Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#market-codes).
    # NOTE: If known, you are encouraged to always specify the market. Specifying
    # the market helps Bing route the request and return an appropriate and optimal
    # response. If you specify a market that is not listed in [Market
    # Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#market-codes),
    # Bing uses a best fit market code based on an internal mapping that is subject
    # to change. This parameter and the
    # [cc](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#cc)
    # query parameter are mutually exclusive—do not specify both.
    # @param max_file_size [Integer] Filter images that are less than or equal to
    # the specified file size. The maximum file size that you may specify is
    # 520,192 bytes. If you specify a larger value, the API uses 520,192. It is
    # possible that the response may include images that are slightly larger than
    # the specified maximum. You may specify this filter and minFileSize to filter
    # images within a range of file sizes.
    # @param max_height [Integer] Filter images that have a height that is less
    # than or equal to the specified height. Specify the height in pixels. You may
    # specify this filter and minHeight to filter images within a range of heights.
    # This filter and the height filter are mutually exclusive.
    # @param max_width [Integer] Filter images that have a width that is less than
    # or equal to the specified width. Specify the width in pixels. You may specify
    # this filter and maxWidth to filter images within a range of widths. This
    # filter and the width filter are mutually exclusive.
    # @param min_file_size [Integer] Filter images that are greater than or equal
    # to the specified file size. The maximum file size that you may specify is
    # 520,192 bytes. If you specify a larger value, the API uses 520,192. It is
    # possible that the response may include images that are slightly smaller than
    # the specified minimum. You may specify this filter and maxFileSize to filter
    # images within a range of file sizes.
    # @param min_height [Integer] Filter images that have a height that is greater
    # than or equal to the specified height. Specify the height in pixels. You may
    # specify this filter and maxHeight to filter images within a range of heights.
    # This filter and the height filter are mutually exclusive.
    # @param min_width [Integer] Filter images that have a width that is greater
    # than or equal to the specified width. Specify the width in pixels. You may
    # specify this filter and maxWidth to filter images within a range of widths.
    # This filter and the width filter are mutually exclusive.
    # @param offset [Integer] The zero-based offset that indicates the number of
    # images to skip before returning images. The default is 0. The offset should
    # be less than
    # ([totalEstimatedMatches](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#totalestimatedmatches)
    # - count). Use this parameter along with the count parameter to page results.
    # For example, if your user interface displays 20 images per page, set count to
    # 20 and offset to 0 to get the first page of results. For each subsequent
    # page, increment offset by 20 (for example, 0, 20, 40). It is possible for
    # multiple pages to include some overlap in results. To prevent duplicates, see
    # [nextOffset](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#nextoffset).
    # Use this parameter only with the Image API. Do not specify this parameter
    # when calling the Trending Images API or the Web Search API.
    # @param safe_search [SafeSearch] Filter images for adult content. The
    # following are the possible filter values. Off: May return images with adult
    # content. If the request is through the Image Search API, the response
    # includes thumbnail images that are clear (non-fuzzy). However, if the request
    # is through the Web Search API, the response includes thumbnail images that
    # are pixelated (fuzzy). Moderate: If the request is through the Image Search
    # API, the response doesn't include images with adult content. If the request
    # is through the Web Search API, the response may include images with adult
    # content (the thumbnail images are pixelated (fuzzy)). Strict: Do not return
    # images with adult content. The default is Moderate. If the request comes from
    # a market that Bing's adult policy requires that safeSearch is set to Strict,
    # Bing ignores the safeSearch value and uses Strict. If you use the site: query
    # operator, there is the chance that the response may contain adult content
    # regardless of what the safeSearch query parameter is set to. Use site: only
    # if you are aware of the content on the site and your scenario supports the
    # possibility of adult content. Possible values include: 'Off', 'Moderate',
    # 'Strict'
    # @param size [ImageSize] Filter images by the following sizes. All: Do not
    # filter by size. Specifying this value is the same as not specifying the size
    # parameter. Small: Return images that are less than 200x200 pixels. Medium:
    # Return images that are greater than or equal to 200x200 pixels but less than
    # 500x500 pixels. Large: Return images that are 500x500 pixels or larger.
    # Wallpaper: Return wallpaper images. You may use this parameter along with the
    # height or width parameters. For example, you may use height and size to
    # request small images that are 150 pixels tall. Possible values include:
    # 'All', 'Small', 'Medium', 'Large', 'Wallpaper'
    # @param set_lang [String] The language to use for user interface strings.
    # Specify the language using the ISO 639-1 2-letter language code. For example,
    # the language code for English is EN. The default is EN (English). Although
    # optional, you should always specify the language. Typically, you set setLang
    # to the same language specified by mkt unless the user wants the user
    # interface strings displayed in a different language. This parameter and the
    # [Accept-Language](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#acceptlanguage)
    # header are mutually exclusive; do not specify both. A user interface string
    # is a string that's used as a label in a user interface. There are few user
    # interface strings in the JSON response objects. Also, any links to Bing.com
    # properties in the response objects apply the specified language.
    # @param width [Integer] Filter images that have the specified width, in
    # pixels. You may use this filter with the size filter to return small images
    # that have a width of 150 pixels.
    # @param [Hash{String => String}] A hash of custom headers that will be added
    # to the HTTP request.
    #
    # @return [Concurrent::Promise] Promise object which holds the HTTP response.
    #
    def search_async(query, accept_language:nil, user_agent:nil, client_id:nil, client_ip:nil, location:nil, aspect:nil, color:nil, country_code:nil, count:nil, freshness:nil, height:nil, id:nil, image_content:nil, image_type:nil, license:nil, market:nil, max_file_size:nil, max_height:nil, max_width:nil, min_file_size:nil, min_height:nil, min_width:nil, offset:nil, safe_search:nil, size:nil, set_lang:nil, width:nil, custom_headers:nil)
      fail ArgumentError, '@client.endpoint is nil' if @client.endpoint.nil?
      x_bing_apis_sdk = 'true'
      fail ArgumentError, 'query is nil' if query.nil?


      request_headers = {}
      request_headers['Content-Type'] = 'application/json; charset=utf-8'

      # Set Headers
      request_headers['x-ms-client-request-id'] = SecureRandom.uuid
      request_headers['X-BingApis-SDK'] = x_bing_apis_sdk unless x_bing_apis_sdk.nil?
      request_headers['Accept-Language'] = accept_language unless accept_language.nil?
      request_headers['User-Agent'] = user_agent unless user_agent.nil?
      request_headers['X-MSEdge-ClientID'] = client_id unless client_id.nil?
      request_headers['X-MSEdge-ClientIP'] = client_ip unless client_ip.nil?
      request_headers['X-Search-Location'] = location unless location.nil?
      path_template = 'images/search'

      request_url = @base_url || @client.base_url
    request_url = request_url.gsub('{Endpoint}', @client.endpoint)

      options = {
          middlewares: [[MsRest::RetryPolicyMiddleware, times: 3, retry: 0.02], [:cookie_jar]],
          query_params: {'aspect' => aspect,'color' => color,'cc' => country_code,'count' => count,'freshness' => freshness,'height' => height,'id' => id,'imageContent' => image_content,'imageType' => image_type,'license' => license,'mkt' => market,'maxFileSize' => max_file_size,'maxHeight' => max_height,'maxWidth' => max_width,'minFileSize' => min_file_size,'minHeight' => min_height,'minWidth' => min_width,'offset' => offset,'q' => query,'safeSearch' => safe_search,'size' => size,'setLang' => set_lang,'width' => width},
          headers: request_headers.merge(custom_headers || {}),
          base_url: request_url
      }
      promise = @client.make_request_async(:get, path_template, options)

      promise = promise.then do |result|
        http_response = result.response
        status_code = http_response.status
        response_content = http_response.body
        unless status_code == 200
          error_model = JSON.load(response_content)
          fail MsRest::HttpOperationError.new(result.request, http_response, error_model)
        end

        result.request_id = http_response['x-ms-request-id'] unless http_response['x-ms-request-id'].nil?
        result.correlation_request_id = http_response['x-ms-correlation-request-id'] unless http_response['x-ms-correlation-request-id'].nil?
        result.client_request_id = http_response['x-ms-client-request-id'] unless http_response['x-ms-client-request-id'].nil?
        # Deserialize Response
        if status_code == 200
          begin
            parsed_response = response_content.to_s.empty? ? nil : JSON.load(response_content)
            result_mapper = Azure::CognitiveServices::ImageSearch::V1_0::Models::Images.mapper()
            result.body = @client.deserialize(result_mapper, parsed_response)
          rescue Exception => e
            fail MsRest::DeserializationError.new('Error occurred in deserializing the response', e.message, e.backtrace, result)
          end
        end

        result
      end

      promise.execute
    end

    #
    # The Image Detail Search API lets you search on Bing and get back insights
    # about an image, such as webpages that include the image. This section
    # provides technical details about the query parameters and headers that you
    # use to request insights of images and the JSON response objects that contain
    # them. For examples that show how to make requests, see [Searching the Web for
    # Images](https://docs.microsoft.com/azure/cognitive-services/bing-image-search/search-the-web).
    #
    # @param query [String] The user's search query term. The term cannot be empty.
    # The term may contain [Bing Advanced
    # Operators](http://msdn.microsoft.com/library/ff795620.aspx). For example, to
    # limit images to a specific domain, use the
    # [site:](http://msdn.microsoft.com/library/ff795613.aspx) operator. To help
    # improve relevance of an insights query (see
    # [insightsToken](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#insightstoken)),
    # you should always include the user's query term. Use this parameter only with
    # the Image Search API.Do not specify this parameter when calling the Trending
    # Images API.
    # @param accept_language [String] A comma-delimited list of one or more
    # languages to use for user interface strings. The list is in decreasing order
    # of preference. For additional information, including expected format, see
    # [RFC2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html). This
    # header and the
    # [setLang](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#setlang)
    # query parameter are mutually exclusive; do not specify both. If you set this
    # header, you must also specify the
    # [cc](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#cc)
    # query parameter. To determine the market to return results for, Bing uses the
    # first supported language it finds from the list and combines it with the cc
    # parameter value. If the list does not include a supported language, Bing
    # finds the closest language and market that supports the request or it uses an
    # aggregated or default market for the results. To determine the market that
    # Bing used, see the BingAPIs-Market header. Use this header and the cc query
    # parameter only if you specify multiple languages. Otherwise, use the
    # [mkt](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#mkt)
    # and
    # [setLang](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#setlang)
    # query parameters. A user interface string is a string that's used as a label
    # in a user interface. There are few user interface strings in the JSON
    # response objects. Any links to Bing.com properties in the response objects
    # apply the specified language.
    # @param content_type [String] Optional request header. If you set the
    # [modules](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#modulesrequested)
    # query parameter to RecognizedEntities, you may specify the binary of an image
    # in the body of a POST request. If you specify the image in the body of a POST
    # request, you must specify this header and set its value to
    # multipart/form-data. The maximum image size is 1 MB.
    # @param user_agent [String] The user agent originating the request. Bing uses
    # the user agent to provide mobile users with an optimized experience. Although
    # optional, you are encouraged to always specify this header. The user-agent
    # should be the same string that any commonly used browser sends. For
    # information about user agents, see [RFC
    # 2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html). The following
    # are examples of user-agent strings. Windows Phone: Mozilla/5.0 (compatible;
    # MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA;
    # Lumia 822). Android: Mozilla / 5.0 (Linux; U; Android 2.3.5; en - us; SCH -
    # I500 Build / GINGERBREAD) AppleWebKit / 533.1 (KHTML; like Gecko) Version /
    # 4.0 Mobile Safari / 533.1. iPhone: Mozilla / 5.0 (iPhone; CPU iPhone OS 6_1
    # like Mac OS X) AppleWebKit / 536.26 (KHTML; like Gecko) Mobile / 10B142
    # iPhone4; 1 BingWeb / 3.03.1428.20120423. PC: Mozilla / 5.0 (Windows NT 6.3;
    # WOW64; Trident / 7.0; Touch; rv:11.0) like Gecko. iPad: Mozilla / 5.0 (iPad;
    # CPU OS 7_0 like Mac OS X) AppleWebKit / 537.51.1 (KHTML, like Gecko) Version
    # / 7.0 Mobile / 11A465 Safari / 9537.53
    # @param client_id [String] Bing uses this header to provide users with
    # consistent behavior across Bing API calls. Bing often flights new features
    # and improvements, and it uses the client ID as a key for assigning traffic on
    # different flights. If you do not use the same client ID for a user across
    # multiple requests, then Bing may assign the user to multiple conflicting
    # flights. Being assigned to multiple conflicting flights can lead to an
    # inconsistent user experience. For example, if the second request has a
    # different flight assignment than the first, the experience may be unexpected.
    # Also, Bing can use the client ID to tailor web results to that client ID’s
    # search history, providing a richer experience for the user. Bing also uses
    # this header to help improve result rankings by analyzing the activity
    # generated by a client ID. The relevance improvements help with better quality
    # of results delivered by Bing APIs and in turn enables higher click-through
    # rates for the API consumer. IMPORTANT: Although optional, you should consider
    # this header required. Persisting the client ID across multiple requests for
    # the same end user and device combination enables 1) the API consumer to
    # receive a consistent user experience, and 2) higher click-through rates via
    # better quality of results from the Bing APIs. Each user that uses your
    # application on the device must have a unique, Bing generated client ID. If
    # you do not include this header in the request, Bing generates an ID and
    # returns it in the X-MSEdge-ClientID response header. The only time that you
    # should NOT include this header in a request is the first time the user uses
    # your app on that device. Use the client ID for each Bing API request that
    # your app makes for this user on the device. Persist the client ID. To persist
    # the ID in a browser app, use a persistent HTTP cookie to ensure the ID is
    # used across all sessions. Do not use a session cookie. For other apps such as
    # mobile apps, use the device's persistent storage to persist the ID. The next
    # time the user uses your app on that device, get the client ID that you
    # persisted. Bing responses may or may not include this header. If the response
    # includes this header, capture the client ID and use it for all subsequent
    # Bing requests for the user on that device. If you include the
    # X-MSEdge-ClientID, you must not include cookies in the request.
    # @param client_ip [String] The IPv4 or IPv6 address of the client device. The
    # IP address is used to discover the user's location. Bing uses the location
    # information to determine safe search behavior. Although optional, you are
    # encouraged to always specify this header and the X-Search-Location header. Do
    # not obfuscate the address (for example, by changing the last octet to 0).
    # Obfuscating the address results in the location not being anywhere near the
    # device's actual location, which may result in Bing serving erroneous results.
    # @param location [String] A semicolon-delimited list of key/value pairs that
    # describe the client's geographical location. Bing uses the location
    # information to determine safe search behavior and to return relevant local
    # content. Specify the key/value pair as <key>:<value>. The following are the
    # keys that you use to specify the user's location. lat (required): The
    # latitude of the client's location, in degrees. The latitude must be greater
    # than or equal to -90.0 and less than or equal to +90.0. Negative values
    # indicate southern latitudes and positive values indicate northern latitudes.
    # long (required): The longitude of the client's location, in degrees. The
    # longitude must be greater than or equal to -180.0 and less than or equal to
    # +180.0. Negative values indicate western longitudes and positive values
    # indicate eastern longitudes. re (required): The radius, in meters, which
    # specifies the horizontal accuracy of the coordinates. Pass the value returned
    # by the device's location service. Typical values might be 22m for GPS/Wi-Fi,
    # 380m for cell tower triangulation, and 18,000m for reverse IP lookup. ts
    # (optional): The UTC UNIX timestamp of when the client was at the location.
    # (The UNIX timestamp is the number of seconds since January 1, 1970.) head
    # (optional): The client's relative heading or direction of travel. Specify the
    # direction of travel as degrees from 0 through 360, counting clockwise
    # relative to true north. Specify this key only if the sp key is nonzero. sp
    # (optional): The horizontal velocity (speed), in meters per second, that the
    # client device is traveling. alt (optional): The altitude of the client
    # device, in meters. are (optional): The radius, in meters, that specifies the
    # vertical accuracy of the coordinates. Specify this key only if you specify
    # the alt key. Although many of the keys are optional, the more information
    # that you provide, the more accurate the location results are. Although
    # optional, you are encouraged to always specify the user's geographical
    # location. Providing the location is especially important if the client's IP
    # address does not accurately reflect the user's physical location (for
    # example, if the client uses VPN). For optimal results, you should include
    # this header and the X-MSEdge-ClientIP header, but at a minimum, you should
    # include this header.
    # @param crop_bottom [Float] The bottom coordinate of the region to crop. The
    # coordinate is a fractional value of the original image's height and is
    # measured from the top, left corner of the image. Specify the coordinate as a
    # value from 0.0 through 1.0. Use this parameter only with the Insights API. Do
    # not specify this parameter when calling the Images, Trending Images, or Web
    # Search APIs.
    # @param crop_left [Float] The left coordinate of the region to crop. The
    # coordinate is a fractional value of the original image's height and is
    # measured from the top, left corner of the image. Specify the coordinate as a
    # value from 0.0 through 1.0. Use this parameter only with the Insights API. Do
    # not specify this parameter when calling the Images, Trending Images, or Web
    # Search APIs.
    # @param crop_right [Float] The right coordinate of the region to crop. The
    # coordinate is a fractional value of the original image's height and is
    # measured from the top, left corner of the image. Specify the coordinate as a
    # value from 0.0 through 1.0. Use this parameter only with the Insights API. Do
    # not specify this parameter when calling the Images, Trending Images, or Web
    # Search APIs.
    # @param crop_top [Float] The top coordinate of the region to crop. The
    # coordinate is a fractional value of the original image's height and is
    # measured from the top, left corner of the image. Specify the coordinate as a
    # value from 0.0 through 1.0. Use this parameter only with the Insights API. Do
    # not specify this parameter when calling the Images, Trending Images, or Web
    # Search APIs.
    # @param crop_type [ImageCropType] The crop type to use when cropping the image
    # based on the coordinates specified in the cal, cat, car, and cab parameters.
    # The following are the possible values. 0: Rectangular (default). Use this
    # parameter only with the Insights API. Do not specify this parameter when
    # calling the Images, Trending Images, or Web Search APIs. Possible values
    # include: 'Rectangular'
    # @param country_code [String] A 2-character country code of the country where
    # the results come from. For a list of possible values, see [Market
    # Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#market-codes).
    # If you set this parameter, you must also specify the
    # [Accept-Language](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#acceptlanguage)
    # header. Bing uses the first supported language it finds from the languages
    # list, and combine that language with the country code that you specify to
    # determine the market to return results for. If the languages list does not
    # include a supported language, Bing finds the closest language and market that
    # supports the request, or it may use an aggregated or default market for the
    # results instead of a specified one. You should use this query parameter and
    # the Accept-Language query parameter only if you specify multiple languages;
    # otherwise, you should use the mkt and setLang query parameters. This
    # parameter and the
    # [mkt](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#mkt)
    # query parameter are mutually exclusive—do not specify both.
    # @param id [String] An ID that uniquely identifies an image. Use this
    # parameter to ensure that the specified image is the first image in the list
    # of images that Bing returns. The
    # [Image](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#image)
    # object's imageId field contains the ID that you set this parameter to.
    # @param image_url [String] The URL of an image that you want to get insights
    # of. Use this parameter as an alternative to using the insightsToken parameter
    # to specify the image. You may also specify the image by placing the binary of
    # the image in the body of a POST request. If you use the binary option, see
    # the
    # [Content-Type](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#contenttype)
    # header. The maximum supported image size is 1 MB. Use this parameter only
    # with the Insights API. Do not specify this parameter when calling the Images,
    # Trending Images, or Web Search APIs.
    # @param insights_token [String] An image token. The
    # [Image](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#image)
    # object's
    # [imageInsightsToken](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#image-imageinsightstoken)
    # contains the token. Specify this parameter to get additional information
    # about an image, such as a caption or shopping source. For a list of the
    # additional information about an image that you can get, see the
    # [modules](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#modulesrequested)
    # query parameter. Use this parameter only with the Insights API. Do not
    # specify this parameter when calling the Images, Trending Images, or Web
    # Search APIs.
    # @param modules [Array<ImageInsightModule>] A comma-delimited list of insights
    # to request. The following are the possible case-insensitive values. All:
    # Return all insights, if available, except RecognizedEntities. BRQ: Best
    # representative query. The query term that best describes the image. Caption:
    # A caption that provides information about the image. If the caption contains
    # entities, the response may include links to images of those entities.
    # Collections: A list of related images. Recipes: A list of recipes for cooking
    # the food shown in the images. PagesIncluding: A list of webpages that include
    # the image. RecognizedEntities: A list of entities (people) that were
    # recognized in the image. NOTE: You may not specify this module with any other
    # module. If you specify it with other modules, the response doesn't include
    # recognized entities. RelatedSearches: A list of related searches made by
    # others. ShoppingSources: A list of merchants where you can buy related
    # offerings. SimilarImages: A list of images that are visually similar to the
    # original image. SimilarProducts: A list of images that contain a product that
    # is similar to a product found in the original image. Tags: Provides
    # characteristics of the type of content found in the image. For example, if
    # the image is of a person, the tags might indicate the person's gender and
    # type of clothes they're wearing. If you specify a module and there is no data
    # for the module, the response object doesn't include the related field. For
    # example, if you specify Caption and it does not exist, the response doesn't
    # include the imageCaption field. To include related searches, the request must
    # include the original query string. Although the original query string is not
    # required for similar images or products, you should always include it because
    # it can help improve relevance and the results. Use this parameter only with
    # the Insights API. Do not specify this parameter when calling the Images,
    # Trending Images, or Web Search APIs.
    # @param market [String] The market where the results come from. Typically, mkt
    # is the country where the user is making the request from. However, it could
    # be a different country if the user is not located in a country where Bing
    # delivers results. The market must be in the form <language code>-<country
    # code>. For example, en-US. The string is case insensitive. For a list of
    # possible market values, see [Market
    # Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#market-codes).
    # NOTE: If known, you are encouraged to always specify the market. Specifying
    # the market helps Bing route the request and return an appropriate and optimal
    # response. If you specify a market that is not listed in [Market
    # Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#market-codes),
    # Bing uses a best fit market code based on an internal mapping that is subject
    # to change. This parameter and the
    # [cc](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#cc)
    # query parameter are mutually exclusive—do not specify both.
    # @param safe_search [SafeSearch] Filter images for adult content. The
    # following are the possible filter values. Off: May return images with adult
    # content. If the request is through the Image Search API, the response
    # includes thumbnail images that are clear (non-fuzzy). However, if the request
    # is through the Web Search API, the response includes thumbnail images that
    # are pixelated (fuzzy). Moderate: If the request is through the Image Search
    # API, the response doesn't include images with adult content. If the request
    # is through the Web Search API, the response may include images with adult
    # content (the thumbnail images are pixelated (fuzzy)). Strict: Do not return
    # images with adult content. The default is Moderate. If the request comes from
    # a market that Bing's adult policy requires that safeSearch is set to Strict,
    # Bing ignores the safeSearch value and uses Strict. If you use the site: query
    # operator, there is the chance that the response may contain adult content
    # regardless of what the safeSearch query parameter is set to. Use site: only
    # if you are aware of the content on the site and your scenario supports the
    # possibility of adult content. Possible values include: 'Off', 'Moderate',
    # 'Strict'
    # @param set_lang [String] The language to use for user interface strings.
    # Specify the language using the ISO 639-1 2-letter language code. For example,
    # the language code for English is EN. The default is EN (English). Although
    # optional, you should always specify the language. Typically, you set setLang
    # to the same language specified by mkt unless the user wants the user
    # interface strings displayed in a different language. This parameter and the
    # [Accept-Language](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#acceptlanguage)
    # header are mutually exclusive; do not specify both. A user interface string
    # is a string that's used as a label in a user interface. There are few user
    # interface strings in the JSON response objects. Also, any links to Bing.com
    # properties in the response objects apply the specified language.
    # @param custom_headers [Hash{String => String}] A hash of custom headers that
    # will be added to the HTTP request.
    #
    # @return [ImageInsights] operation results.
    #
    def details(query, accept_language:nil, content_type:nil, user_agent:nil, client_id:nil, client_ip:nil, location:nil, crop_bottom:nil, crop_left:nil, crop_right:nil, crop_top:nil, crop_type:nil, country_code:nil, id:nil, image_url:nil, insights_token:nil, modules:nil, market:nil, safe_search:nil, set_lang:nil, custom_headers:nil)
      response = details_async(query, accept_language:accept_language, content_type:content_type, user_agent:user_agent, client_id:client_id, client_ip:client_ip, location:location, crop_bottom:crop_bottom, crop_left:crop_left, crop_right:crop_right, crop_top:crop_top, crop_type:crop_type, country_code:country_code, id:id, image_url:image_url, insights_token:insights_token, modules:modules, market:market, safe_search:safe_search, set_lang:set_lang, custom_headers:custom_headers).value!
      response.body unless response.nil?
    end

    #
    # The Image Detail Search API lets you search on Bing and get back insights
    # about an image, such as webpages that include the image. This section
    # provides technical details about the query parameters and headers that you
    # use to request insights of images and the JSON response objects that contain
    # them. For examples that show how to make requests, see [Searching the Web for
    # Images](https://docs.microsoft.com/azure/cognitive-services/bing-image-search/search-the-web).
    #
    # @param query [String] The user's search query term. The term cannot be empty.
    # The term may contain [Bing Advanced
    # Operators](http://msdn.microsoft.com/library/ff795620.aspx). For example, to
    # limit images to a specific domain, use the
    # [site:](http://msdn.microsoft.com/library/ff795613.aspx) operator. To help
    # improve relevance of an insights query (see
    # [insightsToken](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#insightstoken)),
    # you should always include the user's query term. Use this parameter only with
    # the Image Search API.Do not specify this parameter when calling the Trending
    # Images API.
    # @param accept_language [String] A comma-delimited list of one or more
    # languages to use for user interface strings. The list is in decreasing order
    # of preference. For additional information, including expected format, see
    # [RFC2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html). This
    # header and the
    # [setLang](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#setlang)
    # query parameter are mutually exclusive; do not specify both. If you set this
    # header, you must also specify the
    # [cc](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#cc)
    # query parameter. To determine the market to return results for, Bing uses the
    # first supported language it finds from the list and combines it with the cc
    # parameter value. If the list does not include a supported language, Bing
    # finds the closest language and market that supports the request or it uses an
    # aggregated or default market for the results. To determine the market that
    # Bing used, see the BingAPIs-Market header. Use this header and the cc query
    # parameter only if you specify multiple languages. Otherwise, use the
    # [mkt](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#mkt)
    # and
    # [setLang](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#setlang)
    # query parameters. A user interface string is a string that's used as a label
    # in a user interface. There are few user interface strings in the JSON
    # response objects. Any links to Bing.com properties in the response objects
    # apply the specified language.
    # @param content_type [String] Optional request header. If you set the
    # [modules](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#modulesrequested)
    # query parameter to RecognizedEntities, you may specify the binary of an image
    # in the body of a POST request. If you specify the image in the body of a POST
    # request, you must specify this header and set its value to
    # multipart/form-data. The maximum image size is 1 MB.
    # @param user_agent [String] The user agent originating the request. Bing uses
    # the user agent to provide mobile users with an optimized experience. Although
    # optional, you are encouraged to always specify this header. The user-agent
    # should be the same string that any commonly used browser sends. For
    # information about user agents, see [RFC
    # 2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html). The following
    # are examples of user-agent strings. Windows Phone: Mozilla/5.0 (compatible;
    # MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA;
    # Lumia 822). Android: Mozilla / 5.0 (Linux; U; Android 2.3.5; en - us; SCH -
    # I500 Build / GINGERBREAD) AppleWebKit / 533.1 (KHTML; like Gecko) Version /
    # 4.0 Mobile Safari / 533.1. iPhone: Mozilla / 5.0 (iPhone; CPU iPhone OS 6_1
    # like Mac OS X) AppleWebKit / 536.26 (KHTML; like Gecko) Mobile / 10B142
    # iPhone4; 1 BingWeb / 3.03.1428.20120423. PC: Mozilla / 5.0 (Windows NT 6.3;
    # WOW64; Trident / 7.0; Touch; rv:11.0) like Gecko. iPad: Mozilla / 5.0 (iPad;
    # CPU OS 7_0 like Mac OS X) AppleWebKit / 537.51.1 (KHTML, like Gecko) Version
    # / 7.0 Mobile / 11A465 Safari / 9537.53
    # @param client_id [String] Bing uses this header to provide users with
    # consistent behavior across Bing API calls. Bing often flights new features
    # and improvements, and it uses the client ID as a key for assigning traffic on
    # different flights. If you do not use the same client ID for a user across
    # multiple requests, then Bing may assign the user to multiple conflicting
    # flights. Being assigned to multiple conflicting flights can lead to an
    # inconsistent user experience. For example, if the second request has a
    # different flight assignment than the first, the experience may be unexpected.
    # Also, Bing can use the client ID to tailor web results to that client ID’s
    # search history, providing a richer experience for the user. Bing also uses
    # this header to help improve result rankings by analyzing the activity
    # generated by a client ID. The relevance improvements help with better quality
    # of results delivered by Bing APIs and in turn enables higher click-through
    # rates for the API consumer. IMPORTANT: Although optional, you should consider
    # this header required. Persisting the client ID across multiple requests for
    # the same end user and device combination enables 1) the API consumer to
    # receive a consistent user experience, and 2) higher click-through rates via
    # better quality of results from the Bing APIs. Each user that uses your
    # application on the device must have a unique, Bing generated client ID. If
    # you do not include this header in the request, Bing generates an ID and
    # returns it in the X-MSEdge-ClientID response header. The only time that you
    # should NOT include this header in a request is the first time the user uses
    # your app on that device. Use the client ID for each Bing API request that
    # your app makes for this user on the device. Persist the client ID. To persist
    # the ID in a browser app, use a persistent HTTP cookie to ensure the ID is
    # used across all sessions. Do not use a session cookie. For other apps such as
    # mobile apps, use the device's persistent storage to persist the ID. The next
    # time the user uses your app on that device, get the client ID that you
    # persisted. Bing responses may or may not include this header. If the response
    # includes this header, capture the client ID and use it for all subsequent
    # Bing requests for the user on that device. If you include the
    # X-MSEdge-ClientID, you must not include cookies in the request.
    # @param client_ip [String] The IPv4 or IPv6 address of the client device. The
    # IP address is used to discover the user's location. Bing uses the location
    # information to determine safe search behavior. Although optional, you are
    # encouraged to always specify this header and the X-Search-Location header. Do
    # not obfuscate the address (for example, by changing the last octet to 0).
    # Obfuscating the address results in the location not being anywhere near the
    # device's actual location, which may result in Bing serving erroneous results.
    # @param location [String] A semicolon-delimited list of key/value pairs that
    # describe the client's geographical location. Bing uses the location
    # information to determine safe search behavior and to return relevant local
    # content. Specify the key/value pair as <key>:<value>. The following are the
    # keys that you use to specify the user's location. lat (required): The
    # latitude of the client's location, in degrees. The latitude must be greater
    # than or equal to -90.0 and less than or equal to +90.0. Negative values
    # indicate southern latitudes and positive values indicate northern latitudes.
    # long (required): The longitude of the client's location, in degrees. The
    # longitude must be greater than or equal to -180.0 and less than or equal to
    # +180.0. Negative values indicate western longitudes and positive values
    # indicate eastern longitudes. re (required): The radius, in meters, which
    # specifies the horizontal accuracy of the coordinates. Pass the value returned
    # by the device's location service. Typical values might be 22m for GPS/Wi-Fi,
    # 380m for cell tower triangulation, and 18,000m for reverse IP lookup. ts
    # (optional): The UTC UNIX timestamp of when the client was at the location.
    # (The UNIX timestamp is the number of seconds since January 1, 1970.) head
    # (optional): The client's relative heading or direction of travel. Specify the
    # direction of travel as degrees from 0 through 360, counting clockwise
    # relative to true north. Specify this key only if the sp key is nonzero. sp
    # (optional): The horizontal velocity (speed), in meters per second, that the
    # client device is traveling. alt (optional): The altitude of the client
    # device, in meters. are (optional): The radius, in meters, that specifies the
    # vertical accuracy of the coordinates. Specify this key only if you specify
    # the alt key. Although many of the keys are optional, the more information
    # that you provide, the more accurate the location results are. Although
    # optional, you are encouraged to always specify the user's geographical
    # location. Providing the location is especially important if the client's IP
    # address does not accurately reflect the user's physical location (for
    # example, if the client uses VPN). For optimal results, you should include
    # this header and the X-MSEdge-ClientIP header, but at a minimum, you should
    # include this header.
    # @param crop_bottom [Float] The bottom coordinate of the region to crop. The
    # coordinate is a fractional value of the original image's height and is
    # measured from the top, left corner of the image. Specify the coordinate as a
    # value from 0.0 through 1.0. Use this parameter only with the Insights API. Do
    # not specify this parameter when calling the Images, Trending Images, or Web
    # Search APIs.
    # @param crop_left [Float] The left coordinate of the region to crop. The
    # coordinate is a fractional value of the original image's height and is
    # measured from the top, left corner of the image. Specify the coordinate as a
    # value from 0.0 through 1.0. Use this parameter only with the Insights API. Do
    # not specify this parameter when calling the Images, Trending Images, or Web
    # Search APIs.
    # @param crop_right [Float] The right coordinate of the region to crop. The
    # coordinate is a fractional value of the original image's height and is
    # measured from the top, left corner of the image. Specify the coordinate as a
    # value from 0.0 through 1.0. Use this parameter only with the Insights API. Do
    # not specify this parameter when calling the Images, Trending Images, or Web
    # Search APIs.
    # @param crop_top [Float] The top coordinate of the region to crop. The
    # coordinate is a fractional value of the original image's height and is
    # measured from the top, left corner of the image. Specify the coordinate as a
    # value from 0.0 through 1.0. Use this parameter only with the Insights API. Do
    # not specify this parameter when calling the Images, Trending Images, or Web
    # Search APIs.
    # @param crop_type [ImageCropType] The crop type to use when cropping the image
    # based on the coordinates specified in the cal, cat, car, and cab parameters.
    # The following are the possible values. 0: Rectangular (default). Use this
    # parameter only with the Insights API. Do not specify this parameter when
    # calling the Images, Trending Images, or Web Search APIs. Possible values
    # include: 'Rectangular'
    # @param country_code [String] A 2-character country code of the country where
    # the results come from. For a list of possible values, see [Market
    # Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#market-codes).
    # If you set this parameter, you must also specify the
    # [Accept-Language](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#acceptlanguage)
    # header. Bing uses the first supported language it finds from the languages
    # list, and combine that language with the country code that you specify to
    # determine the market to return results for. If the languages list does not
    # include a supported language, Bing finds the closest language and market that
    # supports the request, or it may use an aggregated or default market for the
    # results instead of a specified one. You should use this query parameter and
    # the Accept-Language query parameter only if you specify multiple languages;
    # otherwise, you should use the mkt and setLang query parameters. This
    # parameter and the
    # [mkt](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#mkt)
    # query parameter are mutually exclusive—do not specify both.
    # @param id [String] An ID that uniquely identifies an image. Use this
    # parameter to ensure that the specified image is the first image in the list
    # of images that Bing returns. The
    # [Image](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#image)
    # object's imageId field contains the ID that you set this parameter to.
    # @param image_url [String] The URL of an image that you want to get insights
    # of. Use this parameter as an alternative to using the insightsToken parameter
    # to specify the image. You may also specify the image by placing the binary of
    # the image in the body of a POST request. If you use the binary option, see
    # the
    # [Content-Type](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#contenttype)
    # header. The maximum supported image size is 1 MB. Use this parameter only
    # with the Insights API. Do not specify this parameter when calling the Images,
    # Trending Images, or Web Search APIs.
    # @param insights_token [String] An image token. The
    # [Image](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#image)
    # object's
    # [imageInsightsToken](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#image-imageinsightstoken)
    # contains the token. Specify this parameter to get additional information
    # about an image, such as a caption or shopping source. For a list of the
    # additional information about an image that you can get, see the
    # [modules](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#modulesrequested)
    # query parameter. Use this parameter only with the Insights API. Do not
    # specify this parameter when calling the Images, Trending Images, or Web
    # Search APIs.
    # @param modules [Array<ImageInsightModule>] A comma-delimited list of insights
    # to request. The following are the possible case-insensitive values. All:
    # Return all insights, if available, except RecognizedEntities. BRQ: Best
    # representative query. The query term that best describes the image. Caption:
    # A caption that provides information about the image. If the caption contains
    # entities, the response may include links to images of those entities.
    # Collections: A list of related images. Recipes: A list of recipes for cooking
    # the food shown in the images. PagesIncluding: A list of webpages that include
    # the image. RecognizedEntities: A list of entities (people) that were
    # recognized in the image. NOTE: You may not specify this module with any other
    # module. If you specify it with other modules, the response doesn't include
    # recognized entities. RelatedSearches: A list of related searches made by
    # others. ShoppingSources: A list of merchants where you can buy related
    # offerings. SimilarImages: A list of images that are visually similar to the
    # original image. SimilarProducts: A list of images that contain a product that
    # is similar to a product found in the original image. Tags: Provides
    # characteristics of the type of content found in the image. For example, if
    # the image is of a person, the tags might indicate the person's gender and
    # type of clothes they're wearing. If you specify a module and there is no data
    # for the module, the response object doesn't include the related field. For
    # example, if you specify Caption and it does not exist, the response doesn't
    # include the imageCaption field. To include related searches, the request must
    # include the original query string. Although the original query string is not
    # required for similar images or products, you should always include it because
    # it can help improve relevance and the results. Use this parameter only with
    # the Insights API. Do not specify this parameter when calling the Images,
    # Trending Images, or Web Search APIs.
    # @param market [String] The market where the results come from. Typically, mkt
    # is the country where the user is making the request from. However, it could
    # be a different country if the user is not located in a country where Bing
    # delivers results. The market must be in the form <language code>-<country
    # code>. For example, en-US. The string is case insensitive. For a list of
    # possible market values, see [Market
    # Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#market-codes).
    # NOTE: If known, you are encouraged to always specify the market. Specifying
    # the market helps Bing route the request and return an appropriate and optimal
    # response. If you specify a market that is not listed in [Market
    # Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#market-codes),
    # Bing uses a best fit market code based on an internal mapping that is subject
    # to change. This parameter and the
    # [cc](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#cc)
    # query parameter are mutually exclusive—do not specify both.
    # @param safe_search [SafeSearch] Filter images for adult content. The
    # following are the possible filter values. Off: May return images with adult
    # content. If the request is through the Image Search API, the response
    # includes thumbnail images that are clear (non-fuzzy). However, if the request
    # is through the Web Search API, the response includes thumbnail images that
    # are pixelated (fuzzy). Moderate: If the request is through the Image Search
    # API, the response doesn't include images with adult content. If the request
    # is through the Web Search API, the response may include images with adult
    # content (the thumbnail images are pixelated (fuzzy)). Strict: Do not return
    # images with adult content. The default is Moderate. If the request comes from
    # a market that Bing's adult policy requires that safeSearch is set to Strict,
    # Bing ignores the safeSearch value and uses Strict. If you use the site: query
    # operator, there is the chance that the response may contain adult content
    # regardless of what the safeSearch query parameter is set to. Use site: only
    # if you are aware of the content on the site and your scenario supports the
    # possibility of adult content. Possible values include: 'Off', 'Moderate',
    # 'Strict'
    # @param set_lang [String] The language to use for user interface strings.
    # Specify the language using the ISO 639-1 2-letter language code. For example,
    # the language code for English is EN. The default is EN (English). Although
    # optional, you should always specify the language. Typically, you set setLang
    # to the same language specified by mkt unless the user wants the user
    # interface strings displayed in a different language. This parameter and the
    # [Accept-Language](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#acceptlanguage)
    # header are mutually exclusive; do not specify both. A user interface string
    # is a string that's used as a label in a user interface. There are few user
    # interface strings in the JSON response objects. Also, any links to Bing.com
    # properties in the response objects apply the specified language.
    # @param custom_headers [Hash{String => String}] A hash of custom headers that
    # will be added to the HTTP request.
    #
    # @return [MsRestAzure::AzureOperationResponse] HTTP response information.
    #
    def details_with_http_info(query, accept_language:nil, content_type:nil, user_agent:nil, client_id:nil, client_ip:nil, location:nil, crop_bottom:nil, crop_left:nil, crop_right:nil, crop_top:nil, crop_type:nil, country_code:nil, id:nil, image_url:nil, insights_token:nil, modules:nil, market:nil, safe_search:nil, set_lang:nil, custom_headers:nil)
      details_async(query, accept_language:accept_language, content_type:content_type, user_agent:user_agent, client_id:client_id, client_ip:client_ip, location:location, crop_bottom:crop_bottom, crop_left:crop_left, crop_right:crop_right, crop_top:crop_top, crop_type:crop_type, country_code:country_code, id:id, image_url:image_url, insights_token:insights_token, modules:modules, market:market, safe_search:safe_search, set_lang:set_lang, custom_headers:custom_headers).value!
    end

    #
    # The Image Detail Search API lets you search on Bing and get back insights
    # about an image, such as webpages that include the image. This section
    # provides technical details about the query parameters and headers that you
    # use to request insights of images and the JSON response objects that contain
    # them. For examples that show how to make requests, see [Searching the Web for
    # Images](https://docs.microsoft.com/azure/cognitive-services/bing-image-search/search-the-web).
    #
    # @param query [String] The user's search query term. The term cannot be empty.
    # The term may contain [Bing Advanced
    # Operators](http://msdn.microsoft.com/library/ff795620.aspx). For example, to
    # limit images to a specific domain, use the
    # [site:](http://msdn.microsoft.com/library/ff795613.aspx) operator. To help
    # improve relevance of an insights query (see
    # [insightsToken](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#insightstoken)),
    # you should always include the user's query term. Use this parameter only with
    # the Image Search API.Do not specify this parameter when calling the Trending
    # Images API.
    # @param accept_language [String] A comma-delimited list of one or more
    # languages to use for user interface strings. The list is in decreasing order
    # of preference. For additional information, including expected format, see
    # [RFC2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html). This
    # header and the
    # [setLang](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#setlang)
    # query parameter are mutually exclusive; do not specify both. If you set this
    # header, you must also specify the
    # [cc](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#cc)
    # query parameter. To determine the market to return results for, Bing uses the
    # first supported language it finds from the list and combines it with the cc
    # parameter value. If the list does not include a supported language, Bing
    # finds the closest language and market that supports the request or it uses an
    # aggregated or default market for the results. To determine the market that
    # Bing used, see the BingAPIs-Market header. Use this header and the cc query
    # parameter only if you specify multiple languages. Otherwise, use the
    # [mkt](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#mkt)
    # and
    # [setLang](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#setlang)
    # query parameters. A user interface string is a string that's used as a label
    # in a user interface. There are few user interface strings in the JSON
    # response objects. Any links to Bing.com properties in the response objects
    # apply the specified language.
    # @param content_type [String] Optional request header. If you set the
    # [modules](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#modulesrequested)
    # query parameter to RecognizedEntities, you may specify the binary of an image
    # in the body of a POST request. If you specify the image in the body of a POST
    # request, you must specify this header and set its value to
    # multipart/form-data. The maximum image size is 1 MB.
    # @param user_agent [String] The user agent originating the request. Bing uses
    # the user agent to provide mobile users with an optimized experience. Although
    # optional, you are encouraged to always specify this header. The user-agent
    # should be the same string that any commonly used browser sends. For
    # information about user agents, see [RFC
    # 2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html). The following
    # are examples of user-agent strings. Windows Phone: Mozilla/5.0 (compatible;
    # MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA;
    # Lumia 822). Android: Mozilla / 5.0 (Linux; U; Android 2.3.5; en - us; SCH -
    # I500 Build / GINGERBREAD) AppleWebKit / 533.1 (KHTML; like Gecko) Version /
    # 4.0 Mobile Safari / 533.1. iPhone: Mozilla / 5.0 (iPhone; CPU iPhone OS 6_1
    # like Mac OS X) AppleWebKit / 536.26 (KHTML; like Gecko) Mobile / 10B142
    # iPhone4; 1 BingWeb / 3.03.1428.20120423. PC: Mozilla / 5.0 (Windows NT 6.3;
    # WOW64; Trident / 7.0; Touch; rv:11.0) like Gecko. iPad: Mozilla / 5.0 (iPad;
    # CPU OS 7_0 like Mac OS X) AppleWebKit / 537.51.1 (KHTML, like Gecko) Version
    # / 7.0 Mobile / 11A465 Safari / 9537.53
    # @param client_id [String] Bing uses this header to provide users with
    # consistent behavior across Bing API calls. Bing often flights new features
    # and improvements, and it uses the client ID as a key for assigning traffic on
    # different flights. If you do not use the same client ID for a user across
    # multiple requests, then Bing may assign the user to multiple conflicting
    # flights. Being assigned to multiple conflicting flights can lead to an
    # inconsistent user experience. For example, if the second request has a
    # different flight assignment than the first, the experience may be unexpected.
    # Also, Bing can use the client ID to tailor web results to that client ID’s
    # search history, providing a richer experience for the user. Bing also uses
    # this header to help improve result rankings by analyzing the activity
    # generated by a client ID. The relevance improvements help with better quality
    # of results delivered by Bing APIs and in turn enables higher click-through
    # rates for the API consumer. IMPORTANT: Although optional, you should consider
    # this header required. Persisting the client ID across multiple requests for
    # the same end user and device combination enables 1) the API consumer to
    # receive a consistent user experience, and 2) higher click-through rates via
    # better quality of results from the Bing APIs. Each user that uses your
    # application on the device must have a unique, Bing generated client ID. If
    # you do not include this header in the request, Bing generates an ID and
    # returns it in the X-MSEdge-ClientID response header. The only time that you
    # should NOT include this header in a request is the first time the user uses
    # your app on that device. Use the client ID for each Bing API request that
    # your app makes for this user on the device. Persist the client ID. To persist
    # the ID in a browser app, use a persistent HTTP cookie to ensure the ID is
    # used across all sessions. Do not use a session cookie. For other apps such as
    # mobile apps, use the device's persistent storage to persist the ID. The next
    # time the user uses your app on that device, get the client ID that you
    # persisted. Bing responses may or may not include this header. If the response
    # includes this header, capture the client ID and use it for all subsequent
    # Bing requests for the user on that device. If you include the
    # X-MSEdge-ClientID, you must not include cookies in the request.
    # @param client_ip [String] The IPv4 or IPv6 address of the client device. The
    # IP address is used to discover the user's location. Bing uses the location
    # information to determine safe search behavior. Although optional, you are
    # encouraged to always specify this header and the X-Search-Location header. Do
    # not obfuscate the address (for example, by changing the last octet to 0).
    # Obfuscating the address results in the location not being anywhere near the
    # device's actual location, which may result in Bing serving erroneous results.
    # @param location [String] A semicolon-delimited list of key/value pairs that
    # describe the client's geographical location. Bing uses the location
    # information to determine safe search behavior and to return relevant local
    # content. Specify the key/value pair as <key>:<value>. The following are the
    # keys that you use to specify the user's location. lat (required): The
    # latitude of the client's location, in degrees. The latitude must be greater
    # than or equal to -90.0 and less than or equal to +90.0. Negative values
    # indicate southern latitudes and positive values indicate northern latitudes.
    # long (required): The longitude of the client's location, in degrees. The
    # longitude must be greater than or equal to -180.0 and less than or equal to
    # +180.0. Negative values indicate western longitudes and positive values
    # indicate eastern longitudes. re (required): The radius, in meters, which
    # specifies the horizontal accuracy of the coordinates. Pass the value returned
    # by the device's location service. Typical values might be 22m for GPS/Wi-Fi,
    # 380m for cell tower triangulation, and 18,000m for reverse IP lookup. ts
    # (optional): The UTC UNIX timestamp of when the client was at the location.
    # (The UNIX timestamp is the number of seconds since January 1, 1970.) head
    # (optional): The client's relative heading or direction of travel. Specify the
    # direction of travel as degrees from 0 through 360, counting clockwise
    # relative to true north. Specify this key only if the sp key is nonzero. sp
    # (optional): The horizontal velocity (speed), in meters per second, that the
    # client device is traveling. alt (optional): The altitude of the client
    # device, in meters. are (optional): The radius, in meters, that specifies the
    # vertical accuracy of the coordinates. Specify this key only if you specify
    # the alt key. Although many of the keys are optional, the more information
    # that you provide, the more accurate the location results are. Although
    # optional, you are encouraged to always specify the user's geographical
    # location. Providing the location is especially important if the client's IP
    # address does not accurately reflect the user's physical location (for
    # example, if the client uses VPN). For optimal results, you should include
    # this header and the X-MSEdge-ClientIP header, but at a minimum, you should
    # include this header.
    # @param crop_bottom [Float] The bottom coordinate of the region to crop. The
    # coordinate is a fractional value of the original image's height and is
    # measured from the top, left corner of the image. Specify the coordinate as a
    # value from 0.0 through 1.0. Use this parameter only with the Insights API. Do
    # not specify this parameter when calling the Images, Trending Images, or Web
    # Search APIs.
    # @param crop_left [Float] The left coordinate of the region to crop. The
    # coordinate is a fractional value of the original image's height and is
    # measured from the top, left corner of the image. Specify the coordinate as a
    # value from 0.0 through 1.0. Use this parameter only with the Insights API. Do
    # not specify this parameter when calling the Images, Trending Images, or Web
    # Search APIs.
    # @param crop_right [Float] The right coordinate of the region to crop. The
    # coordinate is a fractional value of the original image's height and is
    # measured from the top, left corner of the image. Specify the coordinate as a
    # value from 0.0 through 1.0. Use this parameter only with the Insights API. Do
    # not specify this parameter when calling the Images, Trending Images, or Web
    # Search APIs.
    # @param crop_top [Float] The top coordinate of the region to crop. The
    # coordinate is a fractional value of the original image's height and is
    # measured from the top, left corner of the image. Specify the coordinate as a
    # value from 0.0 through 1.0. Use this parameter only with the Insights API. Do
    # not specify this parameter when calling the Images, Trending Images, or Web
    # Search APIs.
    # @param crop_type [ImageCropType] The crop type to use when cropping the image
    # based on the coordinates specified in the cal, cat, car, and cab parameters.
    # The following are the possible values. 0: Rectangular (default). Use this
    # parameter only with the Insights API. Do not specify this parameter when
    # calling the Images, Trending Images, or Web Search APIs. Possible values
    # include: 'Rectangular'
    # @param country_code [String] A 2-character country code of the country where
    # the results come from. For a list of possible values, see [Market
    # Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#market-codes).
    # If you set this parameter, you must also specify the
    # [Accept-Language](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#acceptlanguage)
    # header. Bing uses the first supported language it finds from the languages
    # list, and combine that language with the country code that you specify to
    # determine the market to return results for. If the languages list does not
    # include a supported language, Bing finds the closest language and market that
    # supports the request, or it may use an aggregated or default market for the
    # results instead of a specified one. You should use this query parameter and
    # the Accept-Language query parameter only if you specify multiple languages;
    # otherwise, you should use the mkt and setLang query parameters. This
    # parameter and the
    # [mkt](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#mkt)
    # query parameter are mutually exclusive—do not specify both.
    # @param id [String] An ID that uniquely identifies an image. Use this
    # parameter to ensure that the specified image is the first image in the list
    # of images that Bing returns. The
    # [Image](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#image)
    # object's imageId field contains the ID that you set this parameter to.
    # @param image_url [String] The URL of an image that you want to get insights
    # of. Use this parameter as an alternative to using the insightsToken parameter
    # to specify the image. You may also specify the image by placing the binary of
    # the image in the body of a POST request. If you use the binary option, see
    # the
    # [Content-Type](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#contenttype)
    # header. The maximum supported image size is 1 MB. Use this parameter only
    # with the Insights API. Do not specify this parameter when calling the Images,
    # Trending Images, or Web Search APIs.
    # @param insights_token [String] An image token. The
    # [Image](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#image)
    # object's
    # [imageInsightsToken](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#image-imageinsightstoken)
    # contains the token. Specify this parameter to get additional information
    # about an image, such as a caption or shopping source. For a list of the
    # additional information about an image that you can get, see the
    # [modules](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#modulesrequested)
    # query parameter. Use this parameter only with the Insights API. Do not
    # specify this parameter when calling the Images, Trending Images, or Web
    # Search APIs.
    # @param modules [Array<ImageInsightModule>] A comma-delimited list of insights
    # to request. The following are the possible case-insensitive values. All:
    # Return all insights, if available, except RecognizedEntities. BRQ: Best
    # representative query. The query term that best describes the image. Caption:
    # A caption that provides information about the image. If the caption contains
    # entities, the response may include links to images of those entities.
    # Collections: A list of related images. Recipes: A list of recipes for cooking
    # the food shown in the images. PagesIncluding: A list of webpages that include
    # the image. RecognizedEntities: A list of entities (people) that were
    # recognized in the image. NOTE: You may not specify this module with any other
    # module. If you specify it with other modules, the response doesn't include
    # recognized entities. RelatedSearches: A list of related searches made by
    # others. ShoppingSources: A list of merchants where you can buy related
    # offerings. SimilarImages: A list of images that are visually similar to the
    # original image. SimilarProducts: A list of images that contain a product that
    # is similar to a product found in the original image. Tags: Provides
    # characteristics of the type of content found in the image. For example, if
    # the image is of a person, the tags might indicate the person's gender and
    # type of clothes they're wearing. If you specify a module and there is no data
    # for the module, the response object doesn't include the related field. For
    # example, if you specify Caption and it does not exist, the response doesn't
    # include the imageCaption field. To include related searches, the request must
    # include the original query string. Although the original query string is not
    # required for similar images or products, you should always include it because
    # it can help improve relevance and the results. Use this parameter only with
    # the Insights API. Do not specify this parameter when calling the Images,
    # Trending Images, or Web Search APIs.
    # @param market [String] The market where the results come from. Typically, mkt
    # is the country where the user is making the request from. However, it could
    # be a different country if the user is not located in a country where Bing
    # delivers results. The market must be in the form <language code>-<country
    # code>. For example, en-US. The string is case insensitive. For a list of
    # possible market values, see [Market
    # Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#market-codes).
    # NOTE: If known, you are encouraged to always specify the market. Specifying
    # the market helps Bing route the request and return an appropriate and optimal
    # response. If you specify a market that is not listed in [Market
    # Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#market-codes),
    # Bing uses a best fit market code based on an internal mapping that is subject
    # to change. This parameter and the
    # [cc](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#cc)
    # query parameter are mutually exclusive—do not specify both.
    # @param safe_search [SafeSearch] Filter images for adult content. The
    # following are the possible filter values. Off: May return images with adult
    # content. If the request is through the Image Search API, the response
    # includes thumbnail images that are clear (non-fuzzy). However, if the request
    # is through the Web Search API, the response includes thumbnail images that
    # are pixelated (fuzzy). Moderate: If the request is through the Image Search
    # API, the response doesn't include images with adult content. If the request
    # is through the Web Search API, the response may include images with adult
    # content (the thumbnail images are pixelated (fuzzy)). Strict: Do not return
    # images with adult content. The default is Moderate. If the request comes from
    # a market that Bing's adult policy requires that safeSearch is set to Strict,
    # Bing ignores the safeSearch value and uses Strict. If you use the site: query
    # operator, there is the chance that the response may contain adult content
    # regardless of what the safeSearch query parameter is set to. Use site: only
    # if you are aware of the content on the site and your scenario supports the
    # possibility of adult content. Possible values include: 'Off', 'Moderate',
    # 'Strict'
    # @param set_lang [String] The language to use for user interface strings.
    # Specify the language using the ISO 639-1 2-letter language code. For example,
    # the language code for English is EN. The default is EN (English). Although
    # optional, you should always specify the language. Typically, you set setLang
    # to the same language specified by mkt unless the user wants the user
    # interface strings displayed in a different language. This parameter and the
    # [Accept-Language](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#acceptlanguage)
    # header are mutually exclusive; do not specify both. A user interface string
    # is a string that's used as a label in a user interface. There are few user
    # interface strings in the JSON response objects. Also, any links to Bing.com
    # properties in the response objects apply the specified language.
    # @param [Hash{String => String}] A hash of custom headers that will be added
    # to the HTTP request.
    #
    # @return [Concurrent::Promise] Promise object which holds the HTTP response.
    #
    def details_async(query, accept_language:nil, content_type:nil, user_agent:nil, client_id:nil, client_ip:nil, location:nil, crop_bottom:nil, crop_left:nil, crop_right:nil, crop_top:nil, crop_type:nil, country_code:nil, id:nil, image_url:nil, insights_token:nil, modules:nil, market:nil, safe_search:nil, set_lang:nil, custom_headers:nil)
      fail ArgumentError, '@client.endpoint is nil' if @client.endpoint.nil?
      x_bing_apis_sdk = 'true'
      fail ArgumentError, 'query is nil' if query.nil?


      request_headers = {}
      request_headers['Content-Type'] = 'application/json; charset=utf-8'

      # Set Headers
      request_headers['x-ms-client-request-id'] = SecureRandom.uuid
      request_headers['X-BingApis-SDK'] = x_bing_apis_sdk unless x_bing_apis_sdk.nil?
      request_headers['Accept-Language'] = accept_language unless accept_language.nil?
      request_headers['Content-Type'] = content_type unless content_type.nil?
      request_headers['User-Agent'] = user_agent unless user_agent.nil?
      request_headers['X-MSEdge-ClientID'] = client_id unless client_id.nil?
      request_headers['X-MSEdge-ClientIP'] = client_ip unless client_ip.nil?
      request_headers['X-Search-Location'] = location unless location.nil?
      path_template = 'images/details'

      request_url = @base_url || @client.base_url
    request_url = request_url.gsub('{Endpoint}', @client.endpoint)

      options = {
          middlewares: [[MsRest::RetryPolicyMiddleware, times: 3, retry: 0.02], [:cookie_jar]],
          query_params: {'cab' => crop_bottom,'cal' => crop_left,'car' => crop_right,'cat' => crop_top,'ct' => crop_type,'cc' => country_code,'id' => id,'imgUrl' => image_url,'insightsToken' => insights_token,'modules' => modules.nil? ? nil : modules.join(','),'mkt' => market,'q' => query,'safeSearch' => safe_search,'setLang' => set_lang},
          headers: request_headers.merge(custom_headers || {}),
          base_url: request_url
      }
      promise = @client.make_request_async(:get, path_template, options)

      promise = promise.then do |result|
        http_response = result.response
        status_code = http_response.status
        response_content = http_response.body
        unless status_code == 200
          error_model = JSON.load(response_content)
          fail MsRest::HttpOperationError.new(result.request, http_response, error_model)
        end

        result.request_id = http_response['x-ms-request-id'] unless http_response['x-ms-request-id'].nil?
        result.correlation_request_id = http_response['x-ms-correlation-request-id'] unless http_response['x-ms-correlation-request-id'].nil?
        result.client_request_id = http_response['x-ms-client-request-id'] unless http_response['x-ms-client-request-id'].nil?
        # Deserialize Response
        if status_code == 200
          begin
            parsed_response = response_content.to_s.empty? ? nil : JSON.load(response_content)
            result_mapper = Azure::CognitiveServices::ImageSearch::V1_0::Models::ImageInsights.mapper()
            result.body = @client.deserialize(result_mapper, parsed_response)
          rescue Exception => e
            fail MsRest::DeserializationError.new('Error occurred in deserializing the response', e.message, e.backtrace, result)
          end
        end

        result
      end

      promise.execute
    end

    #
    # The Image Trending Search API lets you search on Bing and get back a list of
    # images that are trending based on search requests made by others. The images
    # are broken out into different categories. For example, Popular People
    # Searches. For a list of markets that support trending images, see [Trending
    # Images](https://docs.microsoft.com/en-us/azure/cognitive-services/bing-image-search/trending-images).
    #
    # @param accept_language [String] A comma-delimited list of one or more
    # languages to use for user interface strings. The list is in decreasing order
    # of preference. For additional information, including expected format, see
    # [RFC2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html). This
    # header and the
    # [setLang](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#setlang)
    # query parameter are mutually exclusive; do not specify both. If you set this
    # header, you must also specify the
    # [cc](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#cc)
    # query parameter. To determine the market to return results for, Bing uses the
    # first supported language it finds from the list and combines it with the cc
    # parameter value. If the list does not include a supported language, Bing
    # finds the closest language and market that supports the request or it uses an
    # aggregated or default market for the results. To determine the market that
    # Bing used, see the BingAPIs-Market header. Use this header and the cc query
    # parameter only if you specify multiple languages. Otherwise, use the
    # [mkt](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#mkt)
    # and
    # [setLang](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#setlang)
    # query parameters. A user interface string is a string that's used as a label
    # in a user interface. There are few user interface strings in the JSON
    # response objects. Any links to Bing.com properties in the response objects
    # apply the specified language.
    # @param user_agent [String] The user agent originating the request. Bing uses
    # the user agent to provide mobile users with an optimized experience. Although
    # optional, you are encouraged to always specify this header. The user-agent
    # should be the same string that any commonly used browser sends. For
    # information about user agents, see [RFC
    # 2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html). The following
    # are examples of user-agent strings. Windows Phone: Mozilla/5.0 (compatible;
    # MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA;
    # Lumia 822). Android: Mozilla / 5.0 (Linux; U; Android 2.3.5; en - us; SCH -
    # I500 Build / GINGERBREAD) AppleWebKit / 533.1 (KHTML; like Gecko) Version /
    # 4.0 Mobile Safari / 533.1. iPhone: Mozilla / 5.0 (iPhone; CPU iPhone OS 6_1
    # like Mac OS X) AppleWebKit / 536.26 (KHTML; like Gecko) Mobile / 10B142
    # iPhone4; 1 BingWeb / 3.03.1428.20120423. PC: Mozilla / 5.0 (Windows NT 6.3;
    # WOW64; Trident / 7.0; Touch; rv:11.0) like Gecko. iPad: Mozilla / 5.0 (iPad;
    # CPU OS 7_0 like Mac OS X) AppleWebKit / 537.51.1 (KHTML, like Gecko) Version
    # / 7.0 Mobile / 11A465 Safari / 9537.53
    # @param client_id [String] Bing uses this header to provide users with
    # consistent behavior across Bing API calls. Bing often flights new features
    # and improvements, and it uses the client ID as a key for assigning traffic on
    # different flights. If you do not use the same client ID for a user across
    # multiple requests, then Bing may assign the user to multiple conflicting
    # flights. Being assigned to multiple conflicting flights can lead to an
    # inconsistent user experience. For example, if the second request has a
    # different flight assignment than the first, the experience may be unexpected.
    # Also, Bing can use the client ID to tailor web results to that client ID’s
    # search history, providing a richer experience for the user. Bing also uses
    # this header to help improve result rankings by analyzing the activity
    # generated by a client ID. The relevance improvements help with better quality
    # of results delivered by Bing APIs and in turn enables higher click-through
    # rates for the API consumer. IMPORTANT: Although optional, you should consider
    # this header required. Persisting the client ID across multiple requests for
    # the same end user and device combination enables 1) the API consumer to
    # receive a consistent user experience, and 2) higher click-through rates via
    # better quality of results from the Bing APIs. Each user that uses your
    # application on the device must have a unique, Bing generated client ID. If
    # you do not include this header in the request, Bing generates an ID and
    # returns it in the X-MSEdge-ClientID response header. The only time that you
    # should NOT include this header in a request is the first time the user uses
    # your app on that device. Use the client ID for each Bing API request that
    # your app makes for this user on the device. Persist the client ID. To persist
    # the ID in a browser app, use a persistent HTTP cookie to ensure the ID is
    # used across all sessions. Do not use a session cookie. For other apps such as
    # mobile apps, use the device's persistent storage to persist the ID. The next
    # time the user uses your app on that device, get the client ID that you
    # persisted. Bing responses may or may not include this header. If the response
    # includes this header, capture the client ID and use it for all subsequent
    # Bing requests for the user on that device. If you include the
    # X-MSEdge-ClientID, you must not include cookies in the request.
    # @param client_ip [String] The IPv4 or IPv6 address of the client device. The
    # IP address is used to discover the user's location. Bing uses the location
    # information to determine safe search behavior. Although optional, you are
    # encouraged to always specify this header and the X-Search-Location header. Do
    # not obfuscate the address (for example, by changing the last octet to 0).
    # Obfuscating the address results in the location not being anywhere near the
    # device's actual location, which may result in Bing serving erroneous results.
    # @param location [String] A semicolon-delimited list of key/value pairs that
    # describe the client's geographical location. Bing uses the location
    # information to determine safe search behavior and to return relevant local
    # content. Specify the key/value pair as <key>:<value>. The following are the
    # keys that you use to specify the user's location. lat (required): The
    # latitude of the client's location, in degrees. The latitude must be greater
    # than or equal to -90.0 and less than or equal to +90.0. Negative values
    # indicate southern latitudes and positive values indicate northern latitudes.
    # long (required): The longitude of the client's location, in degrees. The
    # longitude must be greater than or equal to -180.0 and less than or equal to
    # +180.0. Negative values indicate western longitudes and positive values
    # indicate eastern longitudes. re (required): The radius, in meters, which
    # specifies the horizontal accuracy of the coordinates. Pass the value returned
    # by the device's location service. Typical values might be 22m for GPS/Wi-Fi,
    # 380m for cell tower triangulation, and 18,000m for reverse IP lookup. ts
    # (optional): The UTC UNIX timestamp of when the client was at the location.
    # (The UNIX timestamp is the number of seconds since January 1, 1970.) head
    # (optional): The client's relative heading or direction of travel. Specify the
    # direction of travel as degrees from 0 through 360, counting clockwise
    # relative to true north. Specify this key only if the sp key is nonzero. sp
    # (optional): The horizontal velocity (speed), in meters per second, that the
    # client device is traveling. alt (optional): The altitude of the client
    # device, in meters. are (optional): The radius, in meters, that specifies the
    # vertical accuracy of the coordinates. Specify this key only if you specify
    # the alt key. Although many of the keys are optional, the more information
    # that you provide, the more accurate the location results are. Although
    # optional, you are encouraged to always specify the user's geographical
    # location. Providing the location is especially important if the client's IP
    # address does not accurately reflect the user's physical location (for
    # example, if the client uses VPN). For optimal results, you should include
    # this header and the X-MSEdge-ClientIP header, but at a minimum, you should
    # include this header.
    # @param country_code [String] A 2-character country code of the country where
    # the results come from. This API supports only the United States, Canada,
    # Australia, and China markets. If you specify this query parameter, it must be
    # set to us, ca, au, or cn. If you set this parameter, you must also specify
    # the Accept-Language header. Bing uses the first supported language it finds
    # from the languages list, and combine that language with the country code that
    # you specify to determine the market to return results for. If the languages
    # list does not include a supported language, Bing finds the closest language
    # and market that supports the request, or it may use an aggregated or default
    # market for the results instead of a specified one. You should use this query
    # parameter and the Accept-Language query parameter only if you specify
    # multiple languages; otherwise, you should use the mkt and setLang query
    # parameters. This parameter and the mkt query parameter are mutually
    # exclusive—do not specify both.
    # @param market [String] The market where the results come from. Typically, mkt
    # is the country where the user is making the request from. However, it could
    # be a different country if the user is not located in a country where Bing
    # delivers results. The market must be in the form <language code>-<country
    # code>. For example, en-US. The string is case insensitive. For a list of
    # possible market values, see [Market
    # Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#market-codes).
    # NOTE: If known, you are encouraged to always specify the market. Specifying
    # the market helps Bing route the request and return an appropriate and optimal
    # response. If you specify a market that is not listed in [Market
    # Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#market-codes),
    # Bing uses a best fit market code based on an internal mapping that is subject
    # to change. This parameter and the
    # [cc](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#cc)
    # query parameter are mutually exclusive—do not specify both.
    # @param safe_search [SafeSearch] Filter images for adult content. The
    # following are the possible filter values. Off: May return images with adult
    # content. If the request is through the Image Search API, the response
    # includes thumbnail images that are clear (non-fuzzy). However, if the request
    # is through the Web Search API, the response includes thumbnail images that
    # are pixelated (fuzzy). Moderate: If the request is through the Image Search
    # API, the response doesn't include images with adult content. If the request
    # is through the Web Search API, the response may include images with adult
    # content (the thumbnail images are pixelated (fuzzy)). Strict: Do not return
    # images with adult content. The default is Moderate. If the request comes from
    # a market that Bing's adult policy requires that safeSearch is set to Strict,
    # Bing ignores the safeSearch value and uses Strict. If you use the site: query
    # operator, there is the chance that the response may contain adult content
    # regardless of what the safeSearch query parameter is set to. Use site: only
    # if you are aware of the content on the site and your scenario supports the
    # possibility of adult content. Possible values include: 'Off', 'Moderate',
    # 'Strict'
    # @param set_lang [String] The language to use for user interface strings.
    # Specify the language using the ISO 639-1 2-letter language code. For example,
    # the language code for English is EN. The default is EN (English). Although
    # optional, you should always specify the language. Typically, you set setLang
    # to the same language specified by mkt unless the user wants the user
    # interface strings displayed in a different language. This parameter and the
    # [Accept-Language](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#acceptlanguage)
    # header are mutually exclusive; do not specify both. A user interface string
    # is a string that's used as a label in a user interface. There are few user
    # interface strings in the JSON response objects. Also, any links to Bing.com
    # properties in the response objects apply the specified language.
    # @param custom_headers [Hash{String => String}] A hash of custom headers that
    # will be added to the HTTP request.
    #
    # @return [TrendingImages] operation results.
    #
    def trending(accept_language:nil, user_agent:nil, client_id:nil, client_ip:nil, location:nil, country_code:nil, market:nil, safe_search:nil, set_lang:nil, custom_headers:nil)
      response = trending_async(accept_language:accept_language, user_agent:user_agent, client_id:client_id, client_ip:client_ip, location:location, country_code:country_code, market:market, safe_search:safe_search, set_lang:set_lang, custom_headers:custom_headers).value!
      response.body unless response.nil?
    end

    #
    # The Image Trending Search API lets you search on Bing and get back a list of
    # images that are trending based on search requests made by others. The images
    # are broken out into different categories. For example, Popular People
    # Searches. For a list of markets that support trending images, see [Trending
    # Images](https://docs.microsoft.com/en-us/azure/cognitive-services/bing-image-search/trending-images).
    #
    # @param accept_language [String] A comma-delimited list of one or more
    # languages to use for user interface strings. The list is in decreasing order
    # of preference. For additional information, including expected format, see
    # [RFC2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html). This
    # header and the
    # [setLang](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#setlang)
    # query parameter are mutually exclusive; do not specify both. If you set this
    # header, you must also specify the
    # [cc](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#cc)
    # query parameter. To determine the market to return results for, Bing uses the
    # first supported language it finds from the list and combines it with the cc
    # parameter value. If the list does not include a supported language, Bing
    # finds the closest language and market that supports the request or it uses an
    # aggregated or default market for the results. To determine the market that
    # Bing used, see the BingAPIs-Market header. Use this header and the cc query
    # parameter only if you specify multiple languages. Otherwise, use the
    # [mkt](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#mkt)
    # and
    # [setLang](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#setlang)
    # query parameters. A user interface string is a string that's used as a label
    # in a user interface. There are few user interface strings in the JSON
    # response objects. Any links to Bing.com properties in the response objects
    # apply the specified language.
    # @param user_agent [String] The user agent originating the request. Bing uses
    # the user agent to provide mobile users with an optimized experience. Although
    # optional, you are encouraged to always specify this header. The user-agent
    # should be the same string that any commonly used browser sends. For
    # information about user agents, see [RFC
    # 2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html). The following
    # are examples of user-agent strings. Windows Phone: Mozilla/5.0 (compatible;
    # MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA;
    # Lumia 822). Android: Mozilla / 5.0 (Linux; U; Android 2.3.5; en - us; SCH -
    # I500 Build / GINGERBREAD) AppleWebKit / 533.1 (KHTML; like Gecko) Version /
    # 4.0 Mobile Safari / 533.1. iPhone: Mozilla / 5.0 (iPhone; CPU iPhone OS 6_1
    # like Mac OS X) AppleWebKit / 536.26 (KHTML; like Gecko) Mobile / 10B142
    # iPhone4; 1 BingWeb / 3.03.1428.20120423. PC: Mozilla / 5.0 (Windows NT 6.3;
    # WOW64; Trident / 7.0; Touch; rv:11.0) like Gecko. iPad: Mozilla / 5.0 (iPad;
    # CPU OS 7_0 like Mac OS X) AppleWebKit / 537.51.1 (KHTML, like Gecko) Version
    # / 7.0 Mobile / 11A465 Safari / 9537.53
    # @param client_id [String] Bing uses this header to provide users with
    # consistent behavior across Bing API calls. Bing often flights new features
    # and improvements, and it uses the client ID as a key for assigning traffic on
    # different flights. If you do not use the same client ID for a user across
    # multiple requests, then Bing may assign the user to multiple conflicting
    # flights. Being assigned to multiple conflicting flights can lead to an
    # inconsistent user experience. For example, if the second request has a
    # different flight assignment than the first, the experience may be unexpected.
    # Also, Bing can use the client ID to tailor web results to that client ID’s
    # search history, providing a richer experience for the user. Bing also uses
    # this header to help improve result rankings by analyzing the activity
    # generated by a client ID. The relevance improvements help with better quality
    # of results delivered by Bing APIs and in turn enables higher click-through
    # rates for the API consumer. IMPORTANT: Although optional, you should consider
    # this header required. Persisting the client ID across multiple requests for
    # the same end user and device combination enables 1) the API consumer to
    # receive a consistent user experience, and 2) higher click-through rates via
    # better quality of results from the Bing APIs. Each user that uses your
    # application on the device must have a unique, Bing generated client ID. If
    # you do not include this header in the request, Bing generates an ID and
    # returns it in the X-MSEdge-ClientID response header. The only time that you
    # should NOT include this header in a request is the first time the user uses
    # your app on that device. Use the client ID for each Bing API request that
    # your app makes for this user on the device. Persist the client ID. To persist
    # the ID in a browser app, use a persistent HTTP cookie to ensure the ID is
    # used across all sessions. Do not use a session cookie. For other apps such as
    # mobile apps, use the device's persistent storage to persist the ID. The next
    # time the user uses your app on that device, get the client ID that you
    # persisted. Bing responses may or may not include this header. If the response
    # includes this header, capture the client ID and use it for all subsequent
    # Bing requests for the user on that device. If you include the
    # X-MSEdge-ClientID, you must not include cookies in the request.
    # @param client_ip [String] The IPv4 or IPv6 address of the client device. The
    # IP address is used to discover the user's location. Bing uses the location
    # information to determine safe search behavior. Although optional, you are
    # encouraged to always specify this header and the X-Search-Location header. Do
    # not obfuscate the address (for example, by changing the last octet to 0).
    # Obfuscating the address results in the location not being anywhere near the
    # device's actual location, which may result in Bing serving erroneous results.
    # @param location [String] A semicolon-delimited list of key/value pairs that
    # describe the client's geographical location. Bing uses the location
    # information to determine safe search behavior and to return relevant local
    # content. Specify the key/value pair as <key>:<value>. The following are the
    # keys that you use to specify the user's location. lat (required): The
    # latitude of the client's location, in degrees. The latitude must be greater
    # than or equal to -90.0 and less than or equal to +90.0. Negative values
    # indicate southern latitudes and positive values indicate northern latitudes.
    # long (required): The longitude of the client's location, in degrees. The
    # longitude must be greater than or equal to -180.0 and less than or equal to
    # +180.0. Negative values indicate western longitudes and positive values
    # indicate eastern longitudes. re (required): The radius, in meters, which
    # specifies the horizontal accuracy of the coordinates. Pass the value returned
    # by the device's location service. Typical values might be 22m for GPS/Wi-Fi,
    # 380m for cell tower triangulation, and 18,000m for reverse IP lookup. ts
    # (optional): The UTC UNIX timestamp of when the client was at the location.
    # (The UNIX timestamp is the number of seconds since January 1, 1970.) head
    # (optional): The client's relative heading or direction of travel. Specify the
    # direction of travel as degrees from 0 through 360, counting clockwise
    # relative to true north. Specify this key only if the sp key is nonzero. sp
    # (optional): The horizontal velocity (speed), in meters per second, that the
    # client device is traveling. alt (optional): The altitude of the client
    # device, in meters. are (optional): The radius, in meters, that specifies the
    # vertical accuracy of the coordinates. Specify this key only if you specify
    # the alt key. Although many of the keys are optional, the more information
    # that you provide, the more accurate the location results are. Although
    # optional, you are encouraged to always specify the user's geographical
    # location. Providing the location is especially important if the client's IP
    # address does not accurately reflect the user's physical location (for
    # example, if the client uses VPN). For optimal results, you should include
    # this header and the X-MSEdge-ClientIP header, but at a minimum, you should
    # include this header.
    # @param country_code [String] A 2-character country code of the country where
    # the results come from. This API supports only the United States, Canada,
    # Australia, and China markets. If you specify this query parameter, it must be
    # set to us, ca, au, or cn. If you set this parameter, you must also specify
    # the Accept-Language header. Bing uses the first supported language it finds
    # from the languages list, and combine that language with the country code that
    # you specify to determine the market to return results for. If the languages
    # list does not include a supported language, Bing finds the closest language
    # and market that supports the request, or it may use an aggregated or default
    # market for the results instead of a specified one. You should use this query
    # parameter and the Accept-Language query parameter only if you specify
    # multiple languages; otherwise, you should use the mkt and setLang query
    # parameters. This parameter and the mkt query parameter are mutually
    # exclusive—do not specify both.
    # @param market [String] The market where the results come from. Typically, mkt
    # is the country where the user is making the request from. However, it could
    # be a different country if the user is not located in a country where Bing
    # delivers results. The market must be in the form <language code>-<country
    # code>. For example, en-US. The string is case insensitive. For a list of
    # possible market values, see [Market
    # Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#market-codes).
    # NOTE: If known, you are encouraged to always specify the market. Specifying
    # the market helps Bing route the request and return an appropriate and optimal
    # response. If you specify a market that is not listed in [Market
    # Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#market-codes),
    # Bing uses a best fit market code based on an internal mapping that is subject
    # to change. This parameter and the
    # [cc](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#cc)
    # query parameter are mutually exclusive—do not specify both.
    # @param safe_search [SafeSearch] Filter images for adult content. The
    # following are the possible filter values. Off: May return images with adult
    # content. If the request is through the Image Search API, the response
    # includes thumbnail images that are clear (non-fuzzy). However, if the request
    # is through the Web Search API, the response includes thumbnail images that
    # are pixelated (fuzzy). Moderate: If the request is through the Image Search
    # API, the response doesn't include images with adult content. If the request
    # is through the Web Search API, the response may include images with adult
    # content (the thumbnail images are pixelated (fuzzy)). Strict: Do not return
    # images with adult content. The default is Moderate. If the request comes from
    # a market that Bing's adult policy requires that safeSearch is set to Strict,
    # Bing ignores the safeSearch value and uses Strict. If you use the site: query
    # operator, there is the chance that the response may contain adult content
    # regardless of what the safeSearch query parameter is set to. Use site: only
    # if you are aware of the content on the site and your scenario supports the
    # possibility of adult content. Possible values include: 'Off', 'Moderate',
    # 'Strict'
    # @param set_lang [String] The language to use for user interface strings.
    # Specify the language using the ISO 639-1 2-letter language code. For example,
    # the language code for English is EN. The default is EN (English). Although
    # optional, you should always specify the language. Typically, you set setLang
    # to the same language specified by mkt unless the user wants the user
    # interface strings displayed in a different language. This parameter and the
    # [Accept-Language](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#acceptlanguage)
    # header are mutually exclusive; do not specify both. A user interface string
    # is a string that's used as a label in a user interface. There are few user
    # interface strings in the JSON response objects. Also, any links to Bing.com
    # properties in the response objects apply the specified language.
    # @param custom_headers [Hash{String => String}] A hash of custom headers that
    # will be added to the HTTP request.
    #
    # @return [MsRestAzure::AzureOperationResponse] HTTP response information.
    #
    def trending_with_http_info(accept_language:nil, user_agent:nil, client_id:nil, client_ip:nil, location:nil, country_code:nil, market:nil, safe_search:nil, set_lang:nil, custom_headers:nil)
      trending_async(accept_language:accept_language, user_agent:user_agent, client_id:client_id, client_ip:client_ip, location:location, country_code:country_code, market:market, safe_search:safe_search, set_lang:set_lang, custom_headers:custom_headers).value!
    end

    #
    # The Image Trending Search API lets you search on Bing and get back a list of
    # images that are trending based on search requests made by others. The images
    # are broken out into different categories. For example, Popular People
    # Searches. For a list of markets that support trending images, see [Trending
    # Images](https://docs.microsoft.com/en-us/azure/cognitive-services/bing-image-search/trending-images).
    #
    # @param accept_language [String] A comma-delimited list of one or more
    # languages to use for user interface strings. The list is in decreasing order
    # of preference. For additional information, including expected format, see
    # [RFC2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html). This
    # header and the
    # [setLang](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#setlang)
    # query parameter are mutually exclusive; do not specify both. If you set this
    # header, you must also specify the
    # [cc](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#cc)
    # query parameter. To determine the market to return results for, Bing uses the
    # first supported language it finds from the list and combines it with the cc
    # parameter value. If the list does not include a supported language, Bing
    # finds the closest language and market that supports the request or it uses an
    # aggregated or default market for the results. To determine the market that
    # Bing used, see the BingAPIs-Market header. Use this header and the cc query
    # parameter only if you specify multiple languages. Otherwise, use the
    # [mkt](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#mkt)
    # and
    # [setLang](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#setlang)
    # query parameters. A user interface string is a string that's used as a label
    # in a user interface. There are few user interface strings in the JSON
    # response objects. Any links to Bing.com properties in the response objects
    # apply the specified language.
    # @param user_agent [String] The user agent originating the request. Bing uses
    # the user agent to provide mobile users with an optimized experience. Although
    # optional, you are encouraged to always specify this header. The user-agent
    # should be the same string that any commonly used browser sends. For
    # information about user agents, see [RFC
    # 2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html). The following
    # are examples of user-agent strings. Windows Phone: Mozilla/5.0 (compatible;
    # MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA;
    # Lumia 822). Android: Mozilla / 5.0 (Linux; U; Android 2.3.5; en - us; SCH -
    # I500 Build / GINGERBREAD) AppleWebKit / 533.1 (KHTML; like Gecko) Version /
    # 4.0 Mobile Safari / 533.1. iPhone: Mozilla / 5.0 (iPhone; CPU iPhone OS 6_1
    # like Mac OS X) AppleWebKit / 536.26 (KHTML; like Gecko) Mobile / 10B142
    # iPhone4; 1 BingWeb / 3.03.1428.20120423. PC: Mozilla / 5.0 (Windows NT 6.3;
    # WOW64; Trident / 7.0; Touch; rv:11.0) like Gecko. iPad: Mozilla / 5.0 (iPad;
    # CPU OS 7_0 like Mac OS X) AppleWebKit / 537.51.1 (KHTML, like Gecko) Version
    # / 7.0 Mobile / 11A465 Safari / 9537.53
    # @param client_id [String] Bing uses this header to provide users with
    # consistent behavior across Bing API calls. Bing often flights new features
    # and improvements, and it uses the client ID as a key for assigning traffic on
    # different flights. If you do not use the same client ID for a user across
    # multiple requests, then Bing may assign the user to multiple conflicting
    # flights. Being assigned to multiple conflicting flights can lead to an
    # inconsistent user experience. For example, if the second request has a
    # different flight assignment than the first, the experience may be unexpected.
    # Also, Bing can use the client ID to tailor web results to that client ID’s
    # search history, providing a richer experience for the user. Bing also uses
    # this header to help improve result rankings by analyzing the activity
    # generated by a client ID. The relevance improvements help with better quality
    # of results delivered by Bing APIs and in turn enables higher click-through
    # rates for the API consumer. IMPORTANT: Although optional, you should consider
    # this header required. Persisting the client ID across multiple requests for
    # the same end user and device combination enables 1) the API consumer to
    # receive a consistent user experience, and 2) higher click-through rates via
    # better quality of results from the Bing APIs. Each user that uses your
    # application on the device must have a unique, Bing generated client ID. If
    # you do not include this header in the request, Bing generates an ID and
    # returns it in the X-MSEdge-ClientID response header. The only time that you
    # should NOT include this header in a request is the first time the user uses
    # your app on that device. Use the client ID for each Bing API request that
    # your app makes for this user on the device. Persist the client ID. To persist
    # the ID in a browser app, use a persistent HTTP cookie to ensure the ID is
    # used across all sessions. Do not use a session cookie. For other apps such as
    # mobile apps, use the device's persistent storage to persist the ID. The next
    # time the user uses your app on that device, get the client ID that you
    # persisted. Bing responses may or may not include this header. If the response
    # includes this header, capture the client ID and use it for all subsequent
    # Bing requests for the user on that device. If you include the
    # X-MSEdge-ClientID, you must not include cookies in the request.
    # @param client_ip [String] The IPv4 or IPv6 address of the client device. The
    # IP address is used to discover the user's location. Bing uses the location
    # information to determine safe search behavior. Although optional, you are
    # encouraged to always specify this header and the X-Search-Location header. Do
    # not obfuscate the address (for example, by changing the last octet to 0).
    # Obfuscating the address results in the location not being anywhere near the
    # device's actual location, which may result in Bing serving erroneous results.
    # @param location [String] A semicolon-delimited list of key/value pairs that
    # describe the client's geographical location. Bing uses the location
    # information to determine safe search behavior and to return relevant local
    # content. Specify the key/value pair as <key>:<value>. The following are the
    # keys that you use to specify the user's location. lat (required): The
    # latitude of the client's location, in degrees. The latitude must be greater
    # than or equal to -90.0 and less than or equal to +90.0. Negative values
    # indicate southern latitudes and positive values indicate northern latitudes.
    # long (required): The longitude of the client's location, in degrees. The
    # longitude must be greater than or equal to -180.0 and less than or equal to
    # +180.0. Negative values indicate western longitudes and positive values
    # indicate eastern longitudes. re (required): The radius, in meters, which
    # specifies the horizontal accuracy of the coordinates. Pass the value returned
    # by the device's location service. Typical values might be 22m for GPS/Wi-Fi,
    # 380m for cell tower triangulation, and 18,000m for reverse IP lookup. ts
    # (optional): The UTC UNIX timestamp of when the client was at the location.
    # (The UNIX timestamp is the number of seconds since January 1, 1970.) head
    # (optional): The client's relative heading or direction of travel. Specify the
    # direction of travel as degrees from 0 through 360, counting clockwise
    # relative to true north. Specify this key only if the sp key is nonzero. sp
    # (optional): The horizontal velocity (speed), in meters per second, that the
    # client device is traveling. alt (optional): The altitude of the client
    # device, in meters. are (optional): The radius, in meters, that specifies the
    # vertical accuracy of the coordinates. Specify this key only if you specify
    # the alt key. Although many of the keys are optional, the more information
    # that you provide, the more accurate the location results are. Although
    # optional, you are encouraged to always specify the user's geographical
    # location. Providing the location is especially important if the client's IP
    # address does not accurately reflect the user's physical location (for
    # example, if the client uses VPN). For optimal results, you should include
    # this header and the X-MSEdge-ClientIP header, but at a minimum, you should
    # include this header.
    # @param country_code [String] A 2-character country code of the country where
    # the results come from. This API supports only the United States, Canada,
    # Australia, and China markets. If you specify this query parameter, it must be
    # set to us, ca, au, or cn. If you set this parameter, you must also specify
    # the Accept-Language header. Bing uses the first supported language it finds
    # from the languages list, and combine that language with the country code that
    # you specify to determine the market to return results for. If the languages
    # list does not include a supported language, Bing finds the closest language
    # and market that supports the request, or it may use an aggregated or default
    # market for the results instead of a specified one. You should use this query
    # parameter and the Accept-Language query parameter only if you specify
    # multiple languages; otherwise, you should use the mkt and setLang query
    # parameters. This parameter and the mkt query parameter are mutually
    # exclusive—do not specify both.
    # @param market [String] The market where the results come from. Typically, mkt
    # is the country where the user is making the request from. However, it could
    # be a different country if the user is not located in a country where Bing
    # delivers results. The market must be in the form <language code>-<country
    # code>. For example, en-US. The string is case insensitive. For a list of
    # possible market values, see [Market
    # Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#market-codes).
    # NOTE: If known, you are encouraged to always specify the market. Specifying
    # the market helps Bing route the request and return an appropriate and optimal
    # response. If you specify a market that is not listed in [Market
    # Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#market-codes),
    # Bing uses a best fit market code based on an internal mapping that is subject
    # to change. This parameter and the
    # [cc](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#cc)
    # query parameter are mutually exclusive—do not specify both.
    # @param safe_search [SafeSearch] Filter images for adult content. The
    # following are the possible filter values. Off: May return images with adult
    # content. If the request is through the Image Search API, the response
    # includes thumbnail images that are clear (non-fuzzy). However, if the request
    # is through the Web Search API, the response includes thumbnail images that
    # are pixelated (fuzzy). Moderate: If the request is through the Image Search
    # API, the response doesn't include images with adult content. If the request
    # is through the Web Search API, the response may include images with adult
    # content (the thumbnail images are pixelated (fuzzy)). Strict: Do not return
    # images with adult content. The default is Moderate. If the request comes from
    # a market that Bing's adult policy requires that safeSearch is set to Strict,
    # Bing ignores the safeSearch value and uses Strict. If you use the site: query
    # operator, there is the chance that the response may contain adult content
    # regardless of what the safeSearch query parameter is set to. Use site: only
    # if you are aware of the content on the site and your scenario supports the
    # possibility of adult content. Possible values include: 'Off', 'Moderate',
    # 'Strict'
    # @param set_lang [String] The language to use for user interface strings.
    # Specify the language using the ISO 639-1 2-letter language code. For example,
    # the language code for English is EN. The default is EN (English). Although
    # optional, you should always specify the language. Typically, you set setLang
    # to the same language specified by mkt unless the user wants the user
    # interface strings displayed in a different language. This parameter and the
    # [Accept-Language](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-images-api-v7-reference#acceptlanguage)
    # header are mutually exclusive; do not specify both. A user interface string
    # is a string that's used as a label in a user interface. There are few user
    # interface strings in the JSON response objects. Also, any links to Bing.com
    # properties in the response objects apply the specified language.
    # @param [Hash{String => String}] A hash of custom headers that will be added
    # to the HTTP request.
    #
    # @return [Concurrent::Promise] Promise object which holds the HTTP response.
    #
    def trending_async(accept_language:nil, user_agent:nil, client_id:nil, client_ip:nil, location:nil, country_code:nil, market:nil, safe_search:nil, set_lang:nil, custom_headers:nil)
      fail ArgumentError, '@client.endpoint is nil' if @client.endpoint.nil?
      x_bing_apis_sdk = 'true'


      request_headers = {}
      request_headers['Content-Type'] = 'application/json; charset=utf-8'

      # Set Headers
      request_headers['x-ms-client-request-id'] = SecureRandom.uuid
      request_headers['X-BingApis-SDK'] = x_bing_apis_sdk unless x_bing_apis_sdk.nil?
      request_headers['Accept-Language'] = accept_language unless accept_language.nil?
      request_headers['User-Agent'] = user_agent unless user_agent.nil?
      request_headers['X-MSEdge-ClientID'] = client_id unless client_id.nil?
      request_headers['X-MSEdge-ClientIP'] = client_ip unless client_ip.nil?
      request_headers['X-Search-Location'] = location unless location.nil?
      path_template = 'images/trending'

      request_url = @base_url || @client.base_url
    request_url = request_url.gsub('{Endpoint}', @client.endpoint)

      options = {
          middlewares: [[MsRest::RetryPolicyMiddleware, times: 3, retry: 0.02], [:cookie_jar]],
          query_params: {'cc' => country_code,'mkt' => market,'safeSearch' => safe_search,'setLang' => set_lang},
          headers: request_headers.merge(custom_headers || {}),
          base_url: request_url
      }
      promise = @client.make_request_async(:get, path_template, options)

      promise = promise.then do |result|
        http_response = result.response
        status_code = http_response.status
        response_content = http_response.body
        unless status_code == 200
          error_model = JSON.load(response_content)
          fail MsRest::HttpOperationError.new(result.request, http_response, error_model)
        end

        result.request_id = http_response['x-ms-request-id'] unless http_response['x-ms-request-id'].nil?
        result.correlation_request_id = http_response['x-ms-correlation-request-id'] unless http_response['x-ms-correlation-request-id'].nil?
        result.client_request_id = http_response['x-ms-client-request-id'] unless http_response['x-ms-client-request-id'].nil?
        # Deserialize Response
        if status_code == 200
          begin
            parsed_response = response_content.to_s.empty? ? nil : JSON.load(response_content)
            result_mapper = Azure::CognitiveServices::ImageSearch::V1_0::Models::TrendingImages.mapper()
            result.body = @client.deserialize(result_mapper, parsed_response)
          rescue Exception => e
            fail MsRest::DeserializationError.new('Error occurred in deserializing the response', e.message, e.backtrace, result)
          end
        end

        result
      end

      promise.execute
    end

  end
end
