defmodule PhilomenaWeb.CaptchaPlug do
  alias Philomena.Captcha
  alias Phoenix.Controller
  alias Plug.Conn

  def init([]), do: false

  def call(conn, _opts) do
    user = conn |> Pow.Plug.current_user()

    conn
    |> maybe_check_captcha(user)
  end

  defp maybe_check_captcha(conn, nil) do
    case Captcha.valid_solution?(conn.params) do
      true ->
        conn

      false ->
        conn
        |> Controller.put_flash(
          :error,
          "There was an error verifying you're not a robot. Please try again."
        )
        |> Controller.redirect(external: conn.assigns.referrer)
        |> Conn.halt()
    end
  end

  defp maybe_check_captcha(conn, _user), do: conn
end