defmodule Mobilizon.Service.Statistics do
  @moduledoc """
  A module that provides cached statistics
  """
  alias Mobilizon.Events
  alias Mobilizon.Users

  def get_cached_value(key) do
    case Cachex.fetch(:statistics, key, fn key ->
           case create_cache(key) do
             value when not is_nil(value) -> {:commit, value}
             err -> {:ignore, err}
           end
         end) do
      {status, value} when status in [:ok, :commit] -> value
      _err -> nil
    end
  end

  defp create_cache(:local_users) do
    Users.count_users()
  end

  defp create_cache(:local_events) do
    Events.count_local_events()
  end

  defp create_cache(:local_comments) do
    Events.count_local_comments()
  end
end