# 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.Dialogflow.V3.Model.GoogleCloudDialogflowV2beta1Intent do
  @moduledoc """
  An intent categorizes an end-user's intention for one conversation turn. For each agent, you define many intents, where your combined intents can handle a complete conversation. When an end-user writes or says something, referred to as an end-user expression or end-user input, Dialogflow matches the end-user input to the best intent in your agent. Matching an intent is also known as intent classification. For more information, see the [intent guide](https://cloud.google.com/dialogflow/docs/intents-overview).

  ## Attributes

  *   `action` (*type:* `String.t`, *default:* `nil`) - Optional. The name of the action associated with the intent. Note: The action name must not contain whitespaces.
  *   `defaultResponsePlatforms` (*type:* `list(String.t)`, *default:* `nil`) - Optional. The list of platforms for which the first responses will be copied from the messages in PLATFORM_UNSPECIFIED (i.e. default platform).
  *   `displayName` (*type:* `String.t`, *default:* `nil`) - Required. The name of this intent.
  *   `endInteraction` (*type:* `boolean()`, *default:* `nil`) - Optional. Indicates that this intent ends an interaction. Some integrations (e.g., Actions on Google or Dialogflow phone gateway) use this information to close interaction with an end user. Default is false.
  *   `events` (*type:* `list(String.t)`, *default:* `nil`) - Optional. The collection of event names that trigger the intent. If the collection of input contexts is not empty, all of the contexts must be present in the active user session for an event to trigger this intent. Event names are limited to 150 characters.
  *   `followupIntentInfo` (*type:* `list(GoogleApi.Dialogflow.V3.Model.GoogleCloudDialogflowV2beta1IntentFollowupIntentInfo.t)`, *default:* `nil`) - Output only. Information about all followup intents that have this intent as a direct or indirect parent. We populate this field only in the output.
  *   `inputContextNames` (*type:* `list(String.t)`, *default:* `nil`) - Optional. The list of context names required for this intent to be triggered. Formats: - `projects//agent/sessions/-/contexts/` - `projects//locations//agent/sessions/-/contexts/`
  *   `isFallback` (*type:* `boolean()`, *default:* `nil`) - Optional. Indicates whether this is a fallback intent.
  *   `liveAgentHandoff` (*type:* `boolean()`, *default:* `nil`) - Optional. Indicates that a live agent should be brought in to handle the interaction with the user. In most cases, when you set this flag to true, you would also want to set end_interaction to true as well. Default is false.
  *   `messages` (*type:* `list(GoogleApi.Dialogflow.V3.Model.GoogleCloudDialogflowV2beta1IntentMessage.t)`, *default:* `nil`) - Optional. The collection of rich messages corresponding to the `Response` field in the Dialogflow console.
  *   `mlDisabled` (*type:* `boolean()`, *default:* `nil`) - Optional. Indicates whether Machine Learning is disabled for the intent. Note: If `ml_disabled` setting is set to true, then this intent is not taken into account during inference in `ML ONLY` match mode. Also, auto-markup in the UI is turned off.
  *   `mlEnabled` (*type:* `boolean()`, *default:* `nil`) - Optional. Indicates whether Machine Learning is enabled for the intent. Note: If `ml_enabled` setting is set to false, then this intent is not taken into account during inference in `ML ONLY` match mode. Also, auto-markup in the UI is turned off. DEPRECATED! Please use `ml_disabled` field instead. NOTE: If both `ml_enabled` and `ml_disabled` are either not set or false, then the default value is determined as follows: - Before April 15th, 2018 the default is: ml_enabled = false / ml_disabled = true. - After April 15th, 2018 the default is: ml_enabled = true / ml_disabled = false.
  *   `name` (*type:* `String.t`, *default:* `nil`) - Optional. The unique identifier of this intent. Required for Intents.UpdateIntent and Intents.BatchUpdateIntents methods. Supported formats: - `projects//agent/intents/` - `projects//locations//agent/intents/`
  *   `outputContexts` (*type:* `list(GoogleApi.Dialogflow.V3.Model.GoogleCloudDialogflowV2beta1Context.t)`, *default:* `nil`) - Optional. The collection of contexts that are activated when the intent is matched. Context messages in this collection should not set the parameters field. Setting the `lifespan_count` to 0 will reset the context when the intent is matched. Format: `projects//agent/sessions/-/contexts/`.
  *   `parameters` (*type:* `list(GoogleApi.Dialogflow.V3.Model.GoogleCloudDialogflowV2beta1IntentParameter.t)`, *default:* `nil`) - Optional. The collection of parameters associated with the intent.
  *   `parentFollowupIntentName` (*type:* `String.t`, *default:* `nil`) - Optional. The unique identifier of the parent intent in the chain of followup intents. You can set this field when creating an intent, for example with CreateIntent or BatchUpdateIntents, in order to make this intent a followup intent. It identifies the parent followup intent. Format: `projects//agent/intents/`.
  *   `priority` (*type:* `integer()`, *default:* `nil`) - Optional. The priority of this intent. Higher numbers represent higher priorities. - If the supplied value is unspecified or 0, the service translates the value to 500,000, which corresponds to the `Normal` priority in the console. - If the supplied value is negative, the intent is ignored in runtime detect intent requests.
  *   `resetContexts` (*type:* `boolean()`, *default:* `nil`) - Optional. Indicates whether to delete all contexts in the current session when this intent is matched.
  *   `rootFollowupIntentName` (*type:* `String.t`, *default:* `nil`) - Output only. The unique identifier of the root intent in the chain of followup intents. It identifies the correct followup intents chain for this intent. Format: `projects//agent/intents/`.
  *   `trainingPhrases` (*type:* `list(GoogleApi.Dialogflow.V3.Model.GoogleCloudDialogflowV2beta1IntentTrainingPhrase.t)`, *default:* `nil`) - Optional. The collection of examples that the agent is trained on.
  *   `webhookState` (*type:* `String.t`, *default:* `nil`) - Optional. Indicates whether webhooks are enabled for the intent.
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :action => String.t() | nil,
          :defaultResponsePlatforms => list(String.t()) | nil,
          :displayName => String.t() | nil,
          :endInteraction => boolean() | nil,
          :events => list(String.t()) | nil,
          :followupIntentInfo =>
            list(
              GoogleApi.Dialogflow.V3.Model.GoogleCloudDialogflowV2beta1IntentFollowupIntentInfo.t()
            )
            | nil,
          :inputContextNames => list(String.t()) | nil,
          :isFallback => boolean() | nil,
          :liveAgentHandoff => boolean() | nil,
          :messages =>
            list(GoogleApi.Dialogflow.V3.Model.GoogleCloudDialogflowV2beta1IntentMessage.t())
            | nil,
          :mlDisabled => boolean() | nil,
          :mlEnabled => boolean() | nil,
          :name => String.t() | nil,
          :outputContexts =>
            list(GoogleApi.Dialogflow.V3.Model.GoogleCloudDialogflowV2beta1Context.t()) | nil,
          :parameters =>
            list(GoogleApi.Dialogflow.V3.Model.GoogleCloudDialogflowV2beta1IntentParameter.t())
            | nil,
          :parentFollowupIntentName => String.t() | nil,
          :priority => integer() | nil,
          :resetContexts => boolean() | nil,
          :rootFollowupIntentName => String.t() | nil,
          :trainingPhrases =>
            list(
              GoogleApi.Dialogflow.V3.Model.GoogleCloudDialogflowV2beta1IntentTrainingPhrase.t()
            )
            | nil,
          :webhookState => String.t() | nil
        }

  field(:action)
  field(:defaultResponsePlatforms, type: :list)
  field(:displayName)
  field(:endInteraction)
  field(:events, type: :list)

  field(:followupIntentInfo,
    as: GoogleApi.Dialogflow.V3.Model.GoogleCloudDialogflowV2beta1IntentFollowupIntentInfo,
    type: :list
  )

  field(:inputContextNames, type: :list)
  field(:isFallback)
  field(:liveAgentHandoff)

  field(:messages,
    as: GoogleApi.Dialogflow.V3.Model.GoogleCloudDialogflowV2beta1IntentMessage,
    type: :list
  )

  field(:mlDisabled)
  field(:mlEnabled)
  field(:name)

  field(:outputContexts,
    as: GoogleApi.Dialogflow.V3.Model.GoogleCloudDialogflowV2beta1Context,
    type: :list
  )

  field(:parameters,
    as: GoogleApi.Dialogflow.V3.Model.GoogleCloudDialogflowV2beta1IntentParameter,
    type: :list
  )

  field(:parentFollowupIntentName)
  field(:priority)
  field(:resetContexts)
  field(:rootFollowupIntentName)

  field(:trainingPhrases,
    as: GoogleApi.Dialogflow.V3.Model.GoogleCloudDialogflowV2beta1IntentTrainingPhrase,
    type: :list
  )

  field(:webhookState)
end

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

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