defmodule PhilomenaWeb.Admin.ForumController do
  use PhilomenaWeb, :controller

  alias Philomena.Forums.Forum
  alias Philomena.Forums

  plug :verify_authorized
  plug :load_resource, model: Forum, id_field: "short_name"

  def index(conn, _params) do
    render(conn, "index.html", title: "Admin - Forums")
  end

  def new(conn, _params) do
    changeset = Forums.change_forum(%Forum{})
    render(conn, "new.html", title: "New Forum", changeset: changeset)
  end

  def create(conn, %{"forum" => forum_params}) do
    case Forums.create_forum(forum_params) do
      {:ok, _forum} ->
        conn
        |> put_flash(:info, "Forum created successfully.")
        |> redirect(to: Routes.admin_forum_path(conn, :index))

      {:error, changeset} ->
        render(conn, "new.html", changeset: changeset)
    end
  end

  def edit(conn, _params) do
    changeset = Forums.change_forum(conn.assigns.forum)
    render(conn, "edit.html", title: "Editing Forum", changeset: changeset)
  end

  def update(conn, %{"forum" => forum_params}) do
    case Forums.update_forum(conn.assigns.forum, forum_params) do
      {:ok, _forum} ->
        conn
        |> put_flash(:info, "Forum updated successfully.")
        |> redirect(to: Routes.admin_forum_path(conn, :index))

      {:error, changeset} ->
        render(conn, "edit.html", changeset: changeset)
    end
  end

  defp verify_authorized(conn, _opts) do
    case Canada.Can.can?(conn.assigns.current_user, :edit, Forum) do
      true -> conn
      _false -> PhilomenaWeb.NotAuthorizedPlug.call(conn)
    end
  end
end