defmodule Microwaveprop.Rover.Aggregator do
  @moduledoc """
  Combine per-station link margins into a single per-cell quality
  number using the rover formula `0.7·max + 0.3·mean`. Nil entries
  are dropped before aggregation; an empty (or fully-nil) list
  returns nil.
  """

  @spec cell_margin_db([float() | nil]) :: float() | nil
  def cell_margin_db([]), do: nil

  def cell_margin_db(margins) when is_list(margins) do
    valid = Enum.reject(margins, &is_nil/1)

    case valid do
      [] -> nil
      values -> 0.7 * Enum.max(values) + 0.3 * (Enum.sum(values) / length(values))
    end
  end
end
