;; Example page template and reference index
;; Template receives data values (code strings, titles), calls highlight internally.

(defcomp ~example-page-content (&key title description demo-description demo
    sx-code sx-lang handler-code handler-lang
    comp-placeholder-id wire-placeholder-id wire-note
    comp-heading handler-heading)
  (~doc-page :title title
    (p :class "text-stone-600 mb-6" description)
    (~example-card :title "Demo" :description demo-description
      (~example-demo demo))
    (h3 :class "text-lg font-semibold text-stone-700 mt-6" "S-expression")
    (~example-source :code (highlight sx-code (if sx-lang sx-lang "lisp")))
    (when comp-placeholder-id
      (<>
        (h3 :class "text-lg font-semibold text-stone-700 mt-6"
          (if comp-heading comp-heading "Component"))
        (~doc-placeholder :id comp-placeholder-id)))
    (h3 :class "text-lg font-semibold text-stone-700 mt-6"
      (if handler-heading handler-heading "Server handler"))
    (~example-source :code (highlight handler-code (if handler-lang handler-lang "python")))
    (div :class "flex items-center justify-between mt-6"
      (h3 :class "text-lg font-semibold text-stone-700" "Wire response")
      (~doc-clear-cache-btn))
    (when wire-note
      (p :class "text-stone-500 text-sm mb-2" wire-note))
    (when wire-placeholder-id
      (~doc-placeholder :id wire-placeholder-id))))

(defcomp ~reference-index-content ()
  (~doc-page :title "Reference"
    (p :class "text-stone-600 mb-6"
      "Complete reference for the sx client library.")
    (div :class "grid gap-4 sm:grid-cols-2"
      (a :href "/reference/attributes"
        :sx-get "/reference/attributes" :sx-target "#main-panel" :sx-select "#main-panel"
        :sx-swap "outerHTML" :sx-push-url "true"
        :class "block p-5 rounded-lg border border-stone-200 hover:border-violet-300 hover:shadow-sm transition-all no-underline"
        (h3 :class "text-lg font-semibold text-violet-700 mb-1" "Attributes")
        (p :class "text-stone-600 text-sm" "All sx attributes — request verbs, behavior modifiers, and sx-unique features."))
      (a :href "/reference/headers"
        :sx-get "/reference/headers" :sx-target "#main-panel" :sx-select "#main-panel"
        :sx-swap "outerHTML" :sx-push-url "true"
        :class "block p-5 rounded-lg border border-stone-200 hover:border-violet-300 hover:shadow-sm transition-all no-underline"
        (h3 :class "text-lg font-semibold text-violet-700 mb-1" "Headers")
        (p :class "text-stone-600 text-sm" "Custom HTTP headers used to coordinate between the sx client and server."))
      (a :href "/reference/events"
        :sx-get "/reference/events" :sx-target "#main-panel" :sx-select "#main-panel"
        :sx-swap "outerHTML" :sx-push-url "true"
        :class "block p-5 rounded-lg border border-stone-200 hover:border-violet-300 hover:shadow-sm transition-all no-underline"
        (h3 :class "text-lg font-semibold text-violet-700 mb-1" "Events")
        (p :class "text-stone-600 text-sm" "DOM events fired during the sx request lifecycle."))
      (a :href "/reference/js-api"
        :sx-get "/reference/js-api" :sx-target "#main-panel" :sx-select "#main-panel"
        :sx-swap "outerHTML" :sx-push-url "true"
        :class "block p-5 rounded-lg border border-stone-200 hover:border-violet-300 hover:shadow-sm transition-all no-underline"
        (h3 :class "text-lg font-semibold text-violet-700 mb-1" "JS API")
        (p :class "text-stone-600 text-sm" "JavaScript functions for parsing, evaluating, and rendering s-expressions.")))))
