# 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.Retail.V2.Model.GoogleCloudRetailV2LocalInventory do
  @moduledoc """
  The inventory information at a place (e.g. a store) identified by a place ID.

  ## Attributes

  *   `attributes` (*type:* `%{optional(String.t) => GoogleApi.Retail.V2.Model.GoogleCloudRetailV2CustomAttribute.t}`, *default:* `nil`) - Optional. Additional local inventory attributes, for example, store name, promotion tags, etc. This field needs to pass all below criteria, otherwise an INVALID_ARGUMENT error is returned: * At most 30 attributes are allowed. * The key must be a UTF-8 encoded string with a length limit of 32 characters. * The key must match the pattern: `a-zA-Z0-9*`. For example, key0LikeThis or KEY_1_LIKE_THIS. * The attribute values must be of the same type (text or number). * Only 1 value is allowed for each attribute. * For text values, the length limit is 256 UTF-8 characters. * The attribute does not support search. The `searchable` field should be unset or set to false. * The max summed total bytes of custom attribute keys and values per product is 5MiB.
  *   `availability` (*type:* `String.t`, *default:* `nil`) - Optional. The availability of the Product at this place_id. Default to Availability.IN_STOCK. For primary products with variants set the availability of the primary as Availability.OUT_OF_STOCK and set the true availability at the variant level. This way the primary product will be considered "in stock" as long as it has at least one variant in stock. For primary products with no variants set the true availability at the primary level. Corresponding properties: Google Merchant Center property [availability](https://support.google.com/merchants/answer/6324448). Schema.org property [Offer.availability](https://schema.org/availability).
  *   `fulfillmentTypes` (*type:* `list(String.t)`, *default:* `nil`) - Optional. Supported fulfillment types. Valid fulfillment type values include commonly used types (such as pickup in store and same day delivery), and custom types. Customers have to map custom types to their display names before rendering UI. Supported values: * "pickup-in-store" * "ship-to-store" * "same-day-delivery" * "next-day-delivery" * "custom-type-1" * "custom-type-2" * "custom-type-3" * "custom-type-4" * "custom-type-5" If this field is set to an invalid value other than these, an INVALID_ARGUMENT error is returned. All the elements must be distinct. Otherwise, an INVALID_ARGUMENT error is returned.
  *   `placeId` (*type:* `String.t`, *default:* `nil`) - Optional. The place ID for the current set of inventory information.
  *   `priceInfo` (*type:* `GoogleApi.Retail.V2.Model.GoogleCloudRetailV2PriceInfo.t`, *default:* `nil`) - Optional. Product price and cost information. Google Merchant Center property [price](https://support.google.com/merchants/answer/6324371).
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :attributes =>
            %{
              optional(String.t()) =>
                GoogleApi.Retail.V2.Model.GoogleCloudRetailV2CustomAttribute.t()
            }
            | nil,
          :availability => String.t() | nil,
          :fulfillmentTypes => list(String.t()) | nil,
          :placeId => String.t() | nil,
          :priceInfo => GoogleApi.Retail.V2.Model.GoogleCloudRetailV2PriceInfo.t() | nil
        }

  field(:attributes, as: GoogleApi.Retail.V2.Model.GoogleCloudRetailV2CustomAttribute, type: :map)
  field(:availability)
  field(:fulfillmentTypes, type: :list)
  field(:placeId)
  field(:priceInfo, as: GoogleApi.Retail.V2.Model.GoogleCloudRetailV2PriceInfo)
end

defimpl Poison.Decoder, for: GoogleApi.Retail.V2.Model.GoogleCloudRetailV2LocalInventory do
  def decode(value, options) do
    GoogleApi.Retail.V2.Model.GoogleCloudRetailV2LocalInventory.decode(value, options)
  end
end

defimpl Poison.Encoder, for: GoogleApi.Retail.V2.Model.GoogleCloudRetailV2LocalInventory do
  def encode(value, options) do
    GoogleApi.Gax.ModelBase.encode(value, options)
  end
end
