lib/modules/blocks.ex

defmodule Snowtracex.Blocks do
  @moduledoc """
  Provides access to Snowtrace Blocks API.
  [API Documentation](https://snowtrace.io/apis#blocks)
  """
  use Snowtracex.APIModule

  @module :block

  @type timestamp :: integer() | DateTime.t()

  @spec get_block_number_by_timestamp(timestamp()) ::
          {:ok, integer()} | {:error, any()}
  def get_block_number_by_timestamp(timestamp) when is_integer(timestamp) do
    action = "getblocknobytime"
    params = [timestamp: "#{timestamp}", closest: "before"]

    Client.request(@module, action, params)
    |> case do
      {:ok, block} -> String.to_integer(block)
      error -> error
    end
  end

  def get_block_number_by_timestamp(timestamp) do
    DateTime.to_unix(timestamp)
    |> get_block_number_by_timestamp()
  end
end