# NOTE: This class is auto generated by OpenAPI Generator (
# Do not edit the class manually.

defmodule MailSlurpAPI.Api.FormController do
  @moduledoc """
  API calls for all endpoints tagged `FormController`.

  alias MailSlurpAPI.Connection
  import MailSlurpAPI.RequestBuilder

  @doc """
  Submit a form to be parsed and sent as an email to an address determined by the form fields
  This endpoint allows you to submit HTML forms and receive the field values and files via email.   #### Parameters The endpoint looks for special meta parameters in the form fields OR in the URL request parameters. The meta parameters can be used to specify the behaviour of the email.   You must provide at-least a `_to` email address to tell the endpoint where the form should be emailed. These can be submitted as hidden HTML input fields with the corresponding `name` attributes or as URL query parameters such as `?`  The endpoint takes all other form fields that are named and includes them in the message body of the email. Files are sent as attachments.  #### Submitting This endpoint accepts form submission via POST method. It accepts `application/x-www-form-urlencoded`, and `multipart/form-data` content-types.  #### HTML Example ```html <form    action=\"\"   method=\"post\" >   <input name=\"_to\" type=\"hidden\" value=\"\"/>   <textarea name=\"feedback\"></textarea>   <button type=\"submit\">Submit</button> </form> ```  #### URL Example ```html <form    action=\"\"   method=\"post\" >   <textarea name=\"feedback\"></textarea>   <button type=\"submit\">Submit</button> </form> ```    The email address is specified by a `_to` field OR is extracted from an email alias specified by a `_toAlias` field (see the alias controller for more information).  Endpoint accepts .  You can specify a content type in HTML forms using the `enctype` attribute, for instance: `<form enctype=\"multipart/form-data\">`.  

  ## Parameters

  - connection (MailSlurpAPI.Connection): Connection to server
  - opts (KeywordList): [optional] Optional parameters
    - :to (String.t): The email address that submitted form should be sent to.
    - :subject (String.t): Optional subject of the email that will be sent.
    - :redirect_to (String.t): Optional URL to redirect form submitter to after submission. If not present user will see a success message.
    - :email_address (String.t): Email address of the submitting user. Include this if you wish to record the submitters email address and reply to it later.
    - :success_message (String.t): Optional success message to display if no _redirectTo present.
    - :spam_check (String.t): Optional but recommended field that catches spammers out. Include as a hidden form field but LEAVE EMPTY. Spam-bots will usually fill every field. If the _spamCheck field is filled the form submission will be ignored.
    - :other_parameters (String.t): All other parameters or fields will be accepted and attached to the sent email. This includes files and any HTML form field with a name. These fields will become the body of the email that is sent.
  ## Returns

  {:ok, %MailSlurpAPI.Model.String.t{}} on success
  {:error, info} on failure
  @spec submit_form(Tesla.Env.client, keyword()) :: {:ok, String.t} | {:error, Tesla.Env.t}
  def submit_form(connection, opts \\ []) do
    optional_params = %{
      :"_to" => :query,
      :"_subject" => :query,
      :"_redirectTo" => :query,
      :"_emailAddress" => :query,
      :"_successMessage" => :query,
      :"_spamCheck" => :query,
      :"otherParameters" => :query
    |> method(:post)
    |> url("/forms")
    |> add_optional_params(optional_params, opts)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      { 200, false}