(defpackage #:website/renderer
  (:use #:cl
        #:hsx
        #:jingle)
  (:import-from #:hsx/element
                #:element)
  (:import-from #:website/components/metadata
                #:~metadata)
  (:import-from #:website/components/scripts
                #:~scripts)
  (:import-from #:website/components/layout
                #:~layout))
(in-package #:website/renderer)

(defmethod jingle:process-response :around ((app jingle:app) result)
  (set-response-header :content-type "text/html; charset=utf-8")
  (when (eq (request-method *request*) :get)
    (set-response-header :cache-control "public, max-age=60"))
  (call-next-method app
                    (render-to-string
                     (hsx (html :lang "ja"
                            (head
                              (~metadata :metadata (context :metadata))
                              (~scripts))
                            (body
                              :hx-ext "head-support, response-targets, preload"
                              :hx-boost "true" :hx-swap "transition:true"
                              :hx-target-404 "body" :hx-target-5* "body"
                              (~layout result)))))))