lib/auth0/management/branding.ex

defmodule Auth0.Management.Branding do
  alias Auth0.Config
  alias Auth0.Management.Branding.Get
  alias Auth0.Management.Branding.Patch
  alias Auth0.Management.Branding.Phone
  alias Auth0.Management.Branding.Templates.UniversalLogin
  alias Auth0.Management.Branding.Themes

  @type id :: String.t()
  @type theme_id :: String.t()
  @type config :: Config.t()
  @type error :: {:error, integer, term} | {:error, term}

  @doc """
  Retrieve branding settings.

  ## see
  https://auth0.com/docs/api/management/v2/branding/get-branding

  """
  @spec get(config) ::
          {:ok, map()} | error
  def get(%Config{} = config) do
    Get.execute(config)
  end

  @doc """
  Update branding settings.

  ## see
  https://auth0.com/docs/api/management/v2/branding/patch-branding

  """
  @spec update(map(), config) ::
          {:ok, map()} | error
  def update(%{} = params, %Config{} = config) do
    Patch.execute(params, config)
  end

  @doc """
  Retrieve a list ofphone providers details set for a Tenant. A list of fields to include or exclude may also be specified.

  ## see
  https://auth0.com/docs/api/management/v2/branding/get-branding-phone-providers

  """
  @spec list_phone_providers(map(), config) ::
          {:ok, map()} | error
  def list_phone_providers(%{} = params, %Config{} = config) do
    Phone.Providers.List.execute(params, config)
  end

  @doc """
  Create an phone provider.

  ## see
  https://auth0.com/docs/api/management/v2/branding/create-phone-provider

  """
  @spec configure_phone_provider(map(), config) ::
          {:ok, map()} | error
  def configure_phone_provider(%{} = params, %Config{} = config) do
    Phone.Providers.Configure.execute(params, config)
  end

  @doc """
  Retrieve phone provider details. A list of fields to include or exclude may also be specified.

  ## see
  https://auth0.com/docs/api/management/v2/branding/get-phone-provider

  """
  @spec get_phone_provider(id, config) ::
          {:ok, map()} | error
  def get_phone_provider(id, %Config{} = config) do
    Phone.Providers.Get.execute(id, config)
  end

  @doc """
  Delete the configured phone provider.

  ## see
  https://auth0.com/docs/api/management/v2/branding/delete-phone-provider

  """
  @spec delete_phone_provider(id, config) ::
          {:ok, map()} | error
  def delete_phone_provider(id, %Config{} = config) do
    Phone.Providers.Delete.execute(id, config)
  end

  @doc """
  Update an phone provider.

  ## see
  https://auth0.com/docs/api/management/v2/branding/update-phone-provider

  """
  @spec update_phone_provider(id, map(), config) ::
          {:ok, map()} | error
  def update_phone_provider(id, %{} = params, %Config{} = config) do
    Phone.Providers.Patch.execute(id, params, config)
  end

  @doc """
  Send a test phone notification for the configured provider

  ## see
  https://auth0.com/docs/api/management/v2/branding/try-phone-provider

  """
  @spec test_phone_provider(id, map(), config) ::
          {:ok, map()} | error
  def test_phone_provider(id, %{} = params, %Config{} = config) do
    Phone.Providers.Try.execute(id, params, config)
  end

  @doc """
  Get a list of phone notification templates

  ## see
  https://auth0.com/docs/api/management/v2/branding/get-phone-templates

  """
  @spec list_phone_templates(map(), config) ::
          {:ok, map()} | error
  def list_phone_templates(%{} = params, %Config{} = config) do
    Phone.Templates.List.execute(params, config)
  end

  @doc """
  Create a phone notification template

  ## see
  https://auth0.com/docs/api/management/v2/branding/create-phone-template

  """
  @spec create_phone_template(map(), config) ::
          {:ok, map()} | error
  def create_phone_template(%{} = params, %Config{} = config) do
    Phone.Templates.Create.execute(params, config)
  end

  @doc """
  Get a phone notification template

  ## see
  https://auth0.com/docs/api/management/v2/branding/get-phone-template

  """
  @spec get_phone_template(id, config) ::
          {:ok, map()} | error
  def get_phone_template(id, %Config{} = config) do
    Phone.Templates.Get.execute(id, config)
  end

  @doc """
  Delete a phone notification template

  ## see
  https://auth0.com/docs/api/management/v2/branding/delete-phone-template

  """
  @spec delete_phone_template(id, config) ::
          {:ok, map()} | error
  def delete_phone_template(id, %Config{} = config) do
    Phone.Templates.Delete.execute(id, config)
  end

  @doc """
  Update a phone notification template

  ## see
  https://auth0.com/docs/api/management/v2/branding/update-phone-template

  """
  @spec update_phone_template(id, map(), config) ::
          {:ok, map()} | error
  def update_phone_template(id, %{} = params, %Config{} = config) do
    Phone.Templates.Patch.execute(id, params, config)
  end

  @doc """
  Resets a phone notification template values

  ## see
  https://auth0.com/docs/api/management/v2/branding/reset-phone-template

  """
  @spec reset_phone_template(id, map(), config) ::
          {:ok, map()} | error
  def reset_phone_template(id, %{} = params, %Config{} = config) do
    Phone.Templates.Reset.execute(id, params, config)
  end

  @doc """
  Send a test phone notification for the configured template

  ## see
  https://auth0.com/docs/api/management/v2/branding/try-phone-template

  """
  @spec test_phone_template(id, map(), config) ::
          {:ok, map()} | error
  def test_phone_template(id, %{} = params, %Config{} = config) do
    Phone.Templates.Try.execute(id, params, config)
  end

  @doc """
  Get template for New Universal Login Experience

  ## see
  https://auth0.com/docs/api/management/v2/branding/get-universal-login

  """
  @spec get_universal_login(config) ::
          {:ok, map() | String.t()} | error
  def get_universal_login(%Config{} = config) do
    UniversalLogin.Get.execute(config)
  end

  @doc """
  Delete template for New Universal Login Experience

  ## see
  https://auth0.com/docs/api/management/v2/branding/delete-universal-login

  """
  @spec delete_universal_login(config) :: {:ok, String.t()} | error
  def delete_universal_login(%Config{} = config) do
    UniversalLogin.Delete.execute(config)
  end

  @doc """
  Update the Universal Login branding template.

  ## see
  https://auth0.com/docs/api/management/v2/branding/put-universal-login

  """
  @spec set_universal_login(map(), config) ::
          {:ok, String.t()} | error
  def set_universal_login(%{} = params, %Config{} = config) do
    UniversalLogin.Put.execute(params, config)
  end

  @doc """
  Create branding theme.

  ## see
  https://auth0.com/docs/api/management/v2/branding/post-branding-theme

  """
  @spec create_theme(map(), config) ::
          {:ok, map()} | error
  def create_theme(%{} = params, %Config{} = config) do
    Themes.Create.execute(params, config)
  end

  @doc """
  Retrieve default branding theme.

  ## see
  https://auth0.com/docs/api/management/v2/branding/get-default-branding-theme

  """
  @spec get_default_theme(config) ::
          {:ok, map()} | error
  def get_default_theme(%Config{} = config) do
    Themes.Default.Get.execute(config)
  end

  @doc """
  Retrieve branding theme.

  ## see
  https://auth0.com/docs/api/management/v2/branding/get-branding-theme

  """
  @spec get_theme(theme_id, config) ::
          {:ok, map()} | error
  def get_theme(theme_id, %Config{} = config) do
    Themes.Get.execute(theme_id, config)
  end

  @doc """
  Delete branding theme.

  ## see
  https://auth0.com/docs/api/management/v2/branding/delete-branding-theme

  """
  @spec delete_theme(theme_id, config) ::
          {:ok, String.t()} | error
  def delete_theme(theme_id, %Config{} = config) do
    Themes.Delete.execute(theme_id, config)
  end

  @doc """
  Update branding theme.

  ## see
  https://auth0.com/docs/api/management/v2/branding/patch-branding-theme

  """
  @spec update_theme(theme_id, map(), config) ::
          {:ok, map()} | error
  def update_theme(theme_id, %{} = params, %Config{} = config) do
    Themes.Patch.execute(theme_id, params, config)
  end
end