defmodule PhilomenaWeb.PostView do
  alias Philomena.Attribution
  alias Textile.Parser

  use PhilomenaWeb, :view

  def textile_safe_author(object) do
    author_name = author_name(object)
    at_author_name = "@" <> author_name

    Parser.parse(%{image_transform: & &1}, at_author_name)
    |> Parser.flatten()
    |> case do
      ^at_author_name ->
        author_name

      _ ->
        # Cover *all* possibilities.
        literal =
          author_name
          |> String.replace("==]", "==]==][==")

        "[==#{literal}==]"
    end
  end

  defp author_name(object) do
    cond do
      Attribution.anonymous?(object) || !object.user ->
        PhilomenaWeb.UserAttributionView.anonymous_name(object)

      true ->
        object.user.name
    end
  end
end