lib/athena_web/admin/controllers/item_group_controller.ex

defmodule AthenaWeb.Admin.ItemGroupController do
  use AthenaWeb, :controller

  alias Athena.Inventory
  alias Athena.Inventory.ItemGroup

  def index(conn, %{"event" => event}) do
    event = Inventory.get_event!(event)
    item_groups = Inventory.list_item_groups(event)

    render_with_navigation(conn, event, "index.html", item_groups: item_groups, event: event)
  end

  def new(conn, %{"event" => event}) do
    event = Inventory.get_event!(event)
    changeset = Inventory.change_item_group(%ItemGroup{})

    render_with_navigation(conn, event, "new.html", changeset: changeset, event: event)
  end

  def create(conn, %{"item_group" => item_group_params, "event" => event}) do
    event = Inventory.get_event!(event)

    case Inventory.create_item_group(event, item_group_params) do
      {:ok, item_group} ->
        conn
        |> put_flash(:info, gettext("Item group created successfully."))
        |> redirect(to: Routes.admin_item_group_path(conn, :show, item_group))

      {:error, %Ecto.Changeset{} = changeset} ->
        render_with_navigation(conn, event, "new.html", changeset: changeset, event: event)
    end
  end

  def show(conn, %{"id" => id}) do
    item_group =
      id
      |> Inventory.get_item_group!()
      |> Repo.preload(:event)

    render_with_navigation(conn, item_group.event, "show.html", item_group: item_group)
  end

  def edit(conn, %{"id" => id}) do
    item_group =
      id
      |> Inventory.get_item_group!()
      |> Repo.preload(:event)

    changeset = Inventory.change_item_group(item_group)

    render_with_navigation(conn, item_group.event, "edit.html",
      item_group: item_group,
      changeset: changeset
    )
  end

  def update(conn, %{"id" => id, "item_group" => item_group_params}) do
    item_group =
      id
      |> Inventory.get_item_group!()
      |> Repo.preload(:event)

    case Inventory.update_item_group(item_group, item_group_params) do
      {:ok, item_group} ->
        conn
        |> put_flash(:info, gettext("Item group updated successfully."))
        |> redirect(to: Routes.admin_item_group_path(conn, :show, item_group))

      {:error, %Ecto.Changeset{} = changeset} ->
        render_with_navigation(conn, item_group.event, "edit.html",
          item_group: item_group,
          changeset: changeset
        )
    end
  end

  def delete(conn, %{"id" => id}) do
    %{event_id: event_id} = item_group = Inventory.get_item_group!(id)
    {:ok, _item_group} = Inventory.delete_item_group(item_group)

    conn
    |> put_flash(:info, gettext("Item group deleted successfully."))
    |> redirect(to: Routes.admin_item_group_path(conn, :index, event_id))
  end
end