lib/Arpas/REST/Esri/permesso.ex

defmodule Arpas.REST.Esri.Permesso do
  alias Arpas.REST.Esri.Env
  alias Cape.Generico, as: Gen

  defstruct [:token, :valido_da, :scade, user: :no_token]

  def completa(my_token) do
    adesso = DateTime.now!("Etc/UTC")
    finisce = my_token["expires_in"]
    scadenza = DateTime.add(adesso, finisce, :second)
    my_token = Map.put(my_token, "log_now", adesso)
    Map.put(my_token, "scade", scadenza)
  end

  def users do
    [:no_token, :alai, :idro]
  end

  @doc """
  Restituisce token per accedere ad AGOL
  :idro
  :alai
  """
  def token(:idro), do: token(Env.id_idro(), Env.secret_idro())

  def token(:alai), do: token(Env.id(), Env.secret())

  def token(), do: token(:idro)

  def token(id, secret, expiration \\ "21600") do
    url = Env.token_url()

    payload =
      "client_id=#{id}&client_secret=#{secret}&grant_type=client_credentials&expiration=#{expiration}"

    case Gen.post(url, payload) do
      {:error, reason} ->
        IO.inspect(reason)
        {:error, reason}

      my_token ->
        completa(my_token)
    end
  end

  def get_access_token(log_as \\ :idro) do
    token(log_as)
    |> Map.get("access_token")
  end

  def add_token(log_as) do
    case log_as do
      :no_token ->
        ""

      _user ->
        user_token = get_access_token(log_as)
        "token=#{user_token}"
    end
  end
end