lib/glific/providers/gupshup/wallet.ex

defmodule Glific.Providers.Gupshup.GupshupWallet do
  @moduledoc """
  Module for checking gupshup remaining balance
  """
  import GlificWeb.Gettext

  @gupshup_balance_url "https://api.gupshup.io/sm/api/v2/wallet/balance"

  @doc """
  function for making call to gupshup for remaining balance
  """
  @spec balance(String.t()) :: {:ok, any()} | {:error, String.t()}
  def balance(api_key) do
    case Tesla.get(@gupshup_balance_url, headers: [{"apikey", api_key}]) do
      {:ok, %Tesla.Env{status: status, body: body}} when status in 200..299 ->
        Jason.decode(body)

      {:ok, %Tesla.Env{status: status, body: body}} when status in 400..499 ->
        {:error, body}

      _ ->
        {:error, dgettext("errors", "Invalid BSP API key")}
    end
  end
end