import AOC

aoc 2015, 12 do
  def p1 do
    input_stream()
    |> Stream.flat_map(fn l ->
      Regex.scan(~r/-?\d+/, l)
      |> List.flatten()
    end)
    |> Stream.map(&String.to_integer/1)
    |> Enum.sum()
  end

  def p2 do
    input_string()
    |> String.trim()
    |> Jason.decode!()
    |> count_document()
  end

  def count_document(document) when is_map(document) do
    values = Map.values(document)

    if Enum.member?(values, "red") do
      0
    else
      document
      |> Map.values()
      |> Enum.map(&count_document/1)
      |> Enum.sum()
    end
  end

  def count_document(document) when is_list(document) do
    document
    |> Enum.map(&count_document/1)
    |> Enum.sum()
  end

  def count_document(document) when is_number(document), do: document
  def count_document(_), do: 0
end