defmodule PhilomenaWeb.AdvertPlug do
  alias Philomena.Adverts
  alias Plug.Conn

  def init([]), do: []

  def call(conn, _opts) do
    user = conn.assigns.current_user
    image = conn.assigns[:image]
    show_ads? = show_ads?(user)

    conn
    |> maybe_assign_ad(image, show_ads?)
  end

  defp maybe_assign_ad(conn, nil, true),
    do: Conn.assign(conn, :advert, Adverts.random_live())
  defp maybe_assign_ad(conn, image, true),
    do: Conn.assign(conn, :advert, Adverts.random_live_for(image))
  defp maybe_assign_ad(conn, _image, _false),
    do: conn

  defp show_ads?(%{hide_advertisements: false}),
    do: true
  defp show_ads?(_user),
    do: true
end