defmodule RlRepo.Template do
  require Logger

  def template(template_name, replacements) do
    Logger.info("Loading template #{template_name}")
    {:ok, body} = File.read("assets/html/#{template_name}.html")
    # TODO: Check if there is any actual placeholders
    v = String.contains?(body, "~(")
    Logger.info v
    # if v do
      len = body |> String.split("~(") |> length()
      Logger.info body
      # TODO: Math this out to be equal to the number of splits
      # if len >= 2 do
        template_step(replacements, body, len)
        # Logger.info "Len greater 2"
      # end
    # end
    # body
  end

  def test_template(template_name, replacements) do
    body = "~(reason)"
    # TODO: Check if there is any actual placeholders
    v = String.contains?(body, "~(")
    Logger.info v
    # if v do
      len = body |> String.split("~(") |> length()
      Logger.info body
      # TODO: Math this out to be equal to the number of splits
      # if len >= 2 do
        template_step(replacements, body, len)
        # Logger.info "Len greater 2"
      # end
    # end
    # body
  end

  def template_step(replacements, body, steps_left) do
    [before_placeholder | rest] = split_path = String.split(body, "~(", parts: 2)
    [remains | _] = rest
    [placeholder_name | after_placeholder] = String.split(remains, ")", parts: 2)
    [after_placeholder | _] = after_placeholder

    {:ok, replace} = Map.fetch(replacements, placeholder_name)

    body = before_placeholder <> replace <> after_placeholder

    steps_left = steps_left - 1

    if steps_left == 1 do
      body
    else
      template_step(replacements, body, steps_left)
    end
  end
end