defmodule Outlook.InternalTree.Translation do

  alias Outlook.InternalTree.{InternalNode,TranslationUnit}

  def render_translation([%TranslationUnit{} = tunit | rest], translation) do
    tl_tunit = Map.get(translation, tunit.nid)
    [ %TranslationUnit{tl_tunit |
        eph: add_title_attribute(tunit.eph, tunit.content)
      } | render_translation(rest, translation) ]
  end

  def render_translation([%InternalNode{type: :element} = node | rest], translation) do
    [ %InternalNode{node |
      content: render_translation(node.content, translation)
      } | render_translation(rest, translation) ]
  end

  def render_translation([node | rest], translation) do
    [ node | render_translation(rest, translation) ]
  end

  def render_translation([], _), do: []


  defp add_title_attribute(eph, html_string) do
    attributes = Map.get(eph, :attributes, %{})
    |> Map.put(:title,
      html_string
      |> Floki.parse_fragment!()
      |> Floki.text()
      )
    Map.put(eph, :attributes, attributes)
  end
end
