app/excnab/cnab240/services/encode_details.ex

defmodule ExCnab.Cnab240.Services.EncodeDetails do
  @moduledoc """
  Service to encode params to details
  """
  alias ExCnab.Cnab240.Templates.ChunkFooter
  alias ExCnab.Cnab240.Templates.Details
  alias ExCnab.Cnab240.Templates.ChunkHeader

  @spec run(List.t()) :: List.t(Map.t())
  def run(details) do
    Enum.map(details, fn detail ->
      %{header_lote: header, lotes: details, trailer_lote: footer} = detail

      encoded_header = ChunkHeader.encode(header)
      encoded_detail = Details.encode(details)
      encoded_footer = ChunkFooter.encode(footer)

      [encoded_header, encoded_detail, encoded_footer] |> Enum.join("\r\n")
    end)
    |> Enum.join("\r\n")
  end
end