defmodule PhilomenaWeb.Image.FavoriteController do
  use PhilomenaWeb, :controller

  alias Philomena.Images.Image
  alias Philomena.Repo

  plug :load_and_authorize_resource,
    model: Image,
    id_name: "image_id",
    persisted: true,
    preload: [faves: :user]

  plug :load_votes_if_authorized

  def index(conn, _params) do
    render(conn, "index.html", layout: false)
  end

  defp load_votes_if_authorized(conn, _opts) do
    case Canada.Can.can?(conn.assigns.current_user, :hide, conn.assigns.image) do
      true ->
        image = Repo.preload(conn.assigns.image, upvotes: :user, downvotes: :user, hides: :user)

        conn
        |> assign(:image, image)
        |> assign(:has_votes, true)

      false ->
        assign(conn, :has_votes, false)
    end
  end
end