defmodule BerrypodWeb.Shop.Pages.Search do
  @moduledoc """
  Search page handler for the unified Shop.Page LiveView.
  """

  import Phoenix.Component, only: [assign: 3]
  import Phoenix.LiveView, only: [push_patch: 2]

  alias Berrypod.{Pages, Search}
  alias BerrypodWeb.R

  def init(socket, _params, _uri) do
    page = Pages.get_page("search")

    socket =
      socket
      |> assign(:page_title, "Search")
      |> assign(:page, page)

    {:noreply, socket}
  end

  def handle_params(params, _uri, socket) do
    query = params["q"] || ""
    results = if query != "", do: Search.search(query), else: []

    socket =
      socket
      |> assign(:search_page_query, query)
      |> assign(:search_page_results, results)

    {:noreply, socket}
  end

  def handle_event("search_submit", %{"q" => query}, socket) do
    {:noreply, push_patch(socket, to: R.search() <> "?q=#{query}")}
  end

  def handle_event(_event, _params, _socket), do: :cont
end
