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

# NOTE: This file is auto generated by the elixir code generator program.
# Do not edit this file manually.

defmodule GoogleApi.DisplayVideo.V3.Model.PoiAssignedTargetingOptionDetails do
  @moduledoc """
  Details for assigned POI targeting option. This will be populated in the details field of an AssignedTargetingOption when targeting_type is `TARGETING_TYPE_POI`.

  ## Attributes

  *   `displayName` (*type:* `String.t`, *default:* `nil`) - Output only. The display name of a POI, e.g. "Times Square", "Space Needle", followed by its full address if available.
  *   `latitude` (*type:* `float()`, *default:* `nil`) - Output only. Latitude of the POI rounding to 6th decimal place.
  *   `longitude` (*type:* `float()`, *default:* `nil`) - Output only. Longitude of the POI rounding to 6th decimal place.
  *   `proximityRadiusAmount` (*type:* `float()`, *default:* `nil`) - Required. The radius of the area around the POI that will be targeted. The units of the radius are specified by proximity_radius_unit. Must be 1 to 800 if unit is `DISTANCE_UNIT_KILOMETERS` and 1 to 500 if unit is `DISTANCE_UNIT_MILES`.
  *   `proximityRadiusUnit` (*type:* `String.t`, *default:* `nil`) - Required. The unit of distance by which the targeting radius is measured.
  *   `targetingOptionId` (*type:* `String.t`, *default:* `nil`) - Required. The targeting_option_id of a TargetingOption of type `TARGETING_TYPE_POI`. Accepted POI targeting option IDs can be retrieved using `targetingTypes.targetingOptions.search`. If targeting a specific latitude/longitude coordinate removed from an address or POI name, you can generate the necessary targeting option ID by rounding the desired coordinate values to the 6th decimal place, removing the decimals, and concatenating the string values separated by a semicolon. For example, you can target the latitude/longitude pair of 40.7414691, -74.003387 using the targeting option ID "40741469;-74003387". **Upon** **creation, this field value will be updated to append a semicolon and** **alphanumerical hash value if only latitude/longitude coordinates are** **provided.**
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :displayName => String.t() | nil,
          :latitude => float() | nil,
          :longitude => float() | nil,
          :proximityRadiusAmount => float() | nil,
          :proximityRadiusUnit => String.t() | nil,
          :targetingOptionId => String.t() | nil
        }

  field(:displayName)
  field(:latitude)
  field(:longitude)
  field(:proximityRadiusAmount)
  field(:proximityRadiusUnit)
  field(:targetingOptionId)
end

defimpl Poison.Decoder, for: GoogleApi.DisplayVideo.V3.Model.PoiAssignedTargetingOptionDetails do
  def decode(value, options) do
    GoogleApi.DisplayVideo.V3.Model.PoiAssignedTargetingOptionDetails.decode(value, options)
  end
end

defimpl Poison.Encoder, for: GoogleApi.DisplayVideo.V3.Model.PoiAssignedTargetingOptionDetails do
  def encode(value, options) do
    GoogleApi.Gax.ModelBase.encode(value, options)
  end
end
