lib/resources/accounts.ex

defmodule HeliumElixir.Accounts do
  @moduledoc """
  Documentation for HeliumElixir.
  """
  alias HeliumElixir
  alias HeliumElixir.BlockchainApi
  alias HeliumElixir.BlockchainApi.TakeMinConfig
  alias HeliumElixir.RequestConfig

  def account(%RequestConfig{} = config, address) do
    HeliumElixir.append_path(config, "/accounts/#{address}")
    |> BlockchainApi.get_json()
  end

  def account_activity(%RequestConfig{} = config, %{
        address: address,
        cursor: cursor,
        count: count
      }) do
    HeliumElixir.append_path(config, "/accounts/#{address}/activity")
    |> BlockchainApi.take_min(%TakeMinConfig{
      cursor: cursor,
      min_count: count
    })
  end

  def rewards_sum(%RequestConfig{} = config, %{
        address: address,
        min_time: min_time,
        max_time: max_time
      }) do
    HeliumElixir.append_path(config, "/accounts/#{address}/rewards/sum")
    |> BlockchainApi.get_json(%{
      min_time: min_time,
      max_time: max_time
    })
  end

  def roles(
        %RequestConfig{} = config,
        %{
          address: address,
          cursor: cursor,
          count: count
        } = params
      ) do
    HeliumElixir.append_path(config, "/accounts/#{address}/roles")
    |> BlockchainApi.take_min(%TakeMinConfig{
      cursor: cursor,
      min_count: count,
      params: Map.take(params, [:filter_types, :min_time, :max_time, :limit])
    })
  end
end