defmodule PhilomenaWeb.Search.ReverseController do
  use PhilomenaWeb, :controller

  alias PhilomenaWeb.ImageReverse

  plug :set_scraper_cache
  plug PhilomenaWeb.ScraperPlug, params_key: "image", params_name: "image"

  def index(conn, params) do
    create(conn, params)
  end

  def create(conn, %{"image" => image_params}) when is_map(image_params) do
    images = ImageReverse.images(image_params)

    render(conn, "index.html", title: "Reverse Search", images: images)
  end

  def create(conn, _params) do
    render(conn, "index.html", title: "Reverse Search", images: nil)
  end

  defp set_scraper_cache(conn, _opts) do
    params =
      conn.params
      |> Map.put_new("image", %{})
      |> Map.put_new("scraper_cache", conn.params["url"])
      |> Map.put("distance", normalize_dist(conn.params))

    %{conn | params: params}
  end

  defp normalize_dist(%{"distance" => distance}) do
    ("0" <> distance)
    |> Float.parse()
    |> elem(0)
    |> Float.to_string()
  end

  defp normalize_dist(_dist), do: "0.25"
end