lib/tehama_client/objects/unit.ex

defmodule TehamaClient.Unit do
  @moduledoc """
  A tehama device.
  """

  use TypedStruct

  # require Logger

  typedstruct do
    @typedoc "A typed Device struct"
    field(:id, String.t())
    field(:apt, String.t())
    field(:addr, String.t())
    field(:building, String.t())

    field(:meters, [TehamaClient.Meter.t()])
  end

  def from_devices(devices) when is_list(devices) do
    sorted_devices =
      devices
      |> Enum.sort_by(fn %TehamaClient.Device{node_id: node_id} ->
        node_id
      end)

    unit = sorted_devices |> List.first() |> TehamaClient.Unit.from_device()

    %TehamaClient.Unit{
      unit
      | meters: sorted_devices |> Enum.map(&TehamaClient.Meter.from_device/1)
    }
  end

  def from_device(%TehamaClient.Device{} = device) do
    %TehamaClient.Unit{
      id: device.node_id,
      apt: device.apt,
      addr: device.addr,
      building: device.building
    }
  end
end