defmodule SimpleshopThemeWeb.ThemeHook do
  @moduledoc """
  LiveView on_mount hook for theme settings, CSS, and media assigns.

  Mounted in the public_shop live_session alongside CartHook.
  Eliminates the identical theme-loading boilerplate from every shop LiveView.
  """

  import Phoenix.Component, only: [assign: 3]

  alias SimpleshopTheme.{Settings, Media}
  alias SimpleshopTheme.Theme.{CSSCache, CSSGenerator}

  def on_mount(:mount_theme, _params, _session, socket) do
    theme_settings = Settings.get_theme_settings()

    generated_css =
      case CSSCache.get() do
        {:ok, css} ->
          css

        :miss ->
          css = CSSGenerator.generate(theme_settings)
          CSSCache.put(css)
          css
      end

    socket =
      socket
      |> assign(:theme_settings, theme_settings)
      |> assign(:generated_css, generated_css)
      |> assign(:logo_image, Media.get_logo())
      |> assign(:header_image, Media.get_header())
      |> assign(:mode, :shop)

    {:cont, socket}
  end
end
