(uiop:define-package #:hp/app
  (:use #:cl)
  (:local-nicknames (#:jg #:jingle))
  (:local-nicknames (#:fbr #:ningle-fbr))
  (:import-from #:lack)
  (:export #:*app*
           #:update-routes))
(in-package #:hp/app)

(defparameter *raw-app* (jg:make-app))

(defun update-routes ()
  (fbr:enable-file-based-routing *raw-app*
                                 :dir "src/routes"
                                 :system "hp"
                                 :system-pathname "src"))

(update-routes)

(defun exist-public-file-p (path)
  (and (not (string= path "/"))
       (let ((pathname (probe-file (concatenate 'string "public" path))))
         (and pathname
              (pathname-name pathname)))))

(defparameter *app*
  (lack:builder :accesslog
                (:static
                 :path (lambda (path)
                         (if (exist-public-file-p path) 
                             path
                             nil))
                 :root (asdf:system-relative-pathname :hp "public/"))
                *raw-app*))

; for clackup cmd
*app*