lib/auth0/entity/theme.ex

defmodule Auth0.Entity.Theme do
  @moduledoc """
  Documentation for entity of Theme.

  """

  defmodule Borders do
    @moduledoc """
    Documentation for entity of Theme Borders.

    """

    alias Auth0.Common.Util

    defstruct button_border_radius: nil,
              button_border_weight: nil,
              buttons_style: nil,
              input_border_radius: nil,
              input_border_weight: nil,
              inputs_style: nil,
              show_widget_shadow: nil,
              widget_border_weight: nil,
              widget_corner_radius: nil

    @type t :: %__MODULE__{
            button_border_radius: integer,
            button_border_weight: integer,
            buttons_style: String.t(),
            input_border_radius: integer,
            input_border_weight: integer,
            inputs_style: String.t(),
            show_widget_shadow: boolean,
            widget_border_weight: integer,
            widget_corner_radius: integer
          }

    @spec from(map) :: __MODULE__.t()
    def from(value) do
      value |> Util.to_struct(__MODULE__)
    end
  end

  defmodule Colors do
    @moduledoc """
    Documentation for entity of Theme Colors.

    """

    alias Auth0.Common.Util

    defstruct base_focus_color: nil,
              base_hover_color: nil,
              body_text: nil,
              error: nil,
              header: nil,
              icons: nil,
              input_background: nil,
              input_border: nil,
              input_filled_text: nil,
              input_labels_placeholders: nil,
              links_focused_components: nil,
              primary_button: nil,
              primary_button_label: nil,
              secondary_button_border: nil,
              secondary_button_label: nil,
              success: nil,
              widget_background: nil,
              widget_border: nil

    @type t :: %__MODULE__{
            base_focus_color: String.t(),
            base_hover_color: String.t(),
            body_text: String.t(),
            error: String.t(),
            header: String.t(),
            icons: String.t(),
            input_background: String.t(),
            input_border: String.t(),
            input_filled_text: String.t(),
            input_labels_placeholders: String.t(),
            links_focused_components: String.t(),
            primary_button: String.t(),
            primary_button_label: String.t(),
            secondary_button_border: String.t(),
            secondary_button_label: String.t(),
            success: String.t(),
            widget_background: String.t(),
            widget_border: String.t()
          }

    @spec from(map) :: __MODULE__.t()
    def from(value) do
      value |> Util.to_struct(__MODULE__)
    end
  end

  defmodule Fonts do
    @moduledoc """
    Documentation for entity of Theme Fonts.

    """

    defmodule Style do
      @moduledoc """
      Documentation for entity of Theme Fonts Style.

      """

      alias Auth0.Common.Util

      defstruct bold: nil,
                size: nil

      @type t :: %__MODULE__{
              bold: boolean,
              size: integer
            }

      @spec from(map) :: __MODULE__.t()
      def from(value) do
        value |> Util.to_struct(__MODULE__)
      end
    end

    alias Auth0.Common.Util

    defstruct body_text: nil,
              buttons_text: nil,
              font_url: nil,
              input_labels: nil,
              links: nil,
              links_style: nil,
              reference_text_size: nil,
              subtitle: nil,
              title: nil

    @type t :: %__MODULE__{
            body_text: Style.t(),
            buttons_text: Style.t(),
            font_url: String.t(),
            input_labels: Style.t(),
            links: Style.t(),
            links_style: String.t(),
            reference_text_size: integer,
            subtitle: Style.t(),
            title: Style.t()
          }

    @spec from(map) :: __MODULE__.t()
    def from(value) do
      fonts = value |> Util.to_struct(__MODULE__)

      %{
        fonts
        | body_text:
            if(fonts.body_text |> is_map,
              do: fonts.body_text |> Style.from(),
              else: nil
            ),
          buttons_text:
            if(fonts.buttons_text |> is_map,
              do: fonts.buttons_text |> Style.from(),
              else: nil
            ),
          input_labels:
            if(fonts.input_labels |> is_map,
              do: fonts.input_labels |> Style.from(),
              else: nil
            ),
          links:
            if(fonts.links |> is_map,
              do: fonts.links |> Style.from(),
              else: nil
            ),
          subtitle:
            if(fonts.subtitle |> is_map,
              do: fonts.subtitle |> Style.from(),
              else: nil
            ),
          title:
            if(fonts.title |> is_map,
              do: fonts.title |> Style.from(),
              else: nil
            )
      }
    end
  end

  defmodule PageBackground do
    @moduledoc """
    Documentation for entity of Theme PageBackground.

    """

    alias Auth0.Common.Util

    defstruct background_color: nil,
              background_image_url: nil,
              page_layout: nil

    @type t :: %__MODULE__{
            background_color: String.t(),
            background_image_url: String.t(),
            page_layout: String.t()
          }

    @spec from(map) :: __MODULE__.t()
    def from(value) do
      value |> Util.to_struct(__MODULE__)
    end
  end

  defmodule Widget do
    @moduledoc """
    Documentation for entity of Theme Widget.

    """

    alias Auth0.Common.Util

    defstruct header_text_alignment: nil,
              logo_height: nil,
              logo_position: nil,
              logo_url: nil,
              social_buttons_layout: nil

    @type t :: %__MODULE__{
            header_text_alignment: String.t(),
            logo_height: integer,
            logo_position: String.t(),
            logo_url: String.t(),
            social_buttons_layout: String.t()
          }

    @spec from(map) :: __MODULE__.t()
    def from(value) do
      value |> Util.to_struct(__MODULE__)
    end
  end

  alias Auth0.Common.Util

  defstruct borders: nil,
            colors: nil,
            displayName: nil,
            fonts: nil,
            page_background: nil,
            themeId: nil,
            widget: nil

  @type t :: %__MODULE__{
          borders: Borders.t(),
          colors: Colors.t(),
          displayName: String.t(),
          fonts: Fonts.t(),
          page_background: PageBackground.t(),
          themeId: String.t(),
          widget: Widget.t()
        }

  @spec from(map) :: __MODULE__.t()
  def from(value) do
    theme = value |> Util.to_struct(__MODULE__)

    %{
      theme
      | borders:
          if(theme.borders |> is_map,
            do: theme.borders |> Borders.from(),
            else: nil
          ),
        colors:
          if(theme.colors |> is_map,
            do: theme.colors |> Colors.from(),
            else: nil
          ),
        fonts:
          if(theme.fonts |> is_map,
            do: theme.fonts |> Fonts.from(),
            else: nil
          ),
        page_background:
          if(theme.page_background |> is_map,
            do: theme.page_background |> PageBackground.from(),
            else: nil
          ),
        widget:
          if(theme.widget |> is_map,
            do: theme.widget |> Widget.from(),
            else: nil
          )
    }
  end
end