lib/noaa/observations/message.ex

defmodule NOAA.Observations.Message do
  use PersistConfig

  alias NOAA.Observations.State

  @state_dict get_env(:state_dict)
  @table_spec get_env(:table_spec)

  @spec status(pos_integer) :: String.t()
  def status(301), do: "status code 301 ⇒ Moved Permanently"
  def status(302), do: "status code 302 ⇒ Found"
  def status(403), do: "status code 403 ⇒ Forbidden"
  def status(404), do: "status code 404 ⇒ Not Found"
  def status(code), do: "status code #{code}"

  @spec error(term) :: String.t()
  def error(reason), do: "reason => #{inspect(reason)}"

  @spec error(State.t(), String.t()) :: IO.ANSI.ansilist()
  def error(state, text) do
    [
      [:light_green, "Error fetching NOAA observations for "],
      [:italic, "#{state}...\n"],
      [:light_yellow, text]
    ]
  end

  @spec printing(State.t()) :: IO.ANSI.ansilist()
  def printing(state) do
    [
      @table_spec.left_margin,
      [:light_green, "Printing NOAA observations for "],
      [:italic, "#{@state_dict[state] || "?"}..."]
    ]
  end
end