defmodule SimpleshopThemeWeb.ShopLive.Cart do
  use SimpleshopThemeWeb, :live_view

  alias SimpleshopTheme.Cart

  @impl true
  def mount(_params, _session, socket) do
    {:ok, assign(socket, :page_title, "Cart")}
  end

  @impl true
  def handle_event("increment", %{"id" => variant_id}, socket) do
    cart = Cart.add_item(socket.assigns.raw_cart, variant_id, 1)
    new_qty = Cart.get_quantity(cart, variant_id)

    socket =
      socket
      |> SimpleshopThemeWeb.CartHook.broadcast_and_update(cart)
      |> assign(:cart_status, "Quantity updated to #{new_qty}")

    {:noreply, socket}
  end

  @impl true
  def handle_event("decrement", %{"id" => variant_id}, socket) do
    current = Cart.get_quantity(socket.assigns.raw_cart, variant_id)
    cart = Cart.update_quantity(socket.assigns.raw_cart, variant_id, current - 1)
    new_qty = Cart.get_quantity(cart, variant_id)

    socket =
      socket
      |> SimpleshopThemeWeb.CartHook.broadcast_and_update(cart)
      |> assign(:cart_status, "Quantity updated to #{new_qty}")

    {:noreply, socket}
  end

  @impl true
  def render(assigns) do
    assigns = assign(assigns, :cart_page_subtotal, Cart.calculate_subtotal(assigns.cart_items))

    ~H"""
    <SimpleshopThemeWeb.PageTemplates.cart {assigns} />
    """
  end
end
