defmodule Raindrops do
  @doc """
  Returns a string based on raindrop factors.

  - If the number contains 3 as a prime factor, output 'Pling'.
  - If the number contains 5 as a prime factor, output 'Plang'.
  - If the number contains 7 as a prime factor, output 'Plong'.
  - If the number does not contain 3, 5, or 7 as a prime factor,
    just pass the number's digits straight through.
  """
  @spec convert(pos_integer) :: String.t
  def convert(number) do
    case number do
      number when (rem(number, 3) == 0 and rem(number, 5) == 0 and rem(number, 7) == 0) -> "PlingPlangPlong"
      number when (rem(number, 3) == 0 and rem(number, 5) == 0) -> "PlingPlang"
      number when (rem(number, 3) == 0 and rem(number, 7) == 0) -> "PlingPlong"
      number when (rem(number, 5) == 0 and rem(number, 7) == 0) -> "PlangPlong"
      number when (rem(number, 3) == 0) -> "Pling"
      number when (rem(number, 5) == 0) -> "Plang"
      number when (rem(number, 7) == 0) -> "Plong"
      _ -> Integer.to_string(number)
    end
  end
end