defmodule Server do
  @moduledoc """
  Documentation for `Server`.
  """

  @doc """
  If `n` contains exactly two prime factors, return those prime factors;
  otherwise, return nothing.
  """
  def semiprime(n) do
    case Cache.get(n) do
      nil ->
        case do_semiprime(n) do
          nil ->
            nil

          res ->
            Cache.put(n, res)
            {:miss, res}
        end

      hit ->
        {:hit, hit}
    end
  end

  defp do_semiprime(n) do
    case Math.factor(n) do
      [_, _] = res -> res
      _ -> nil
    end
  end
end