(defpackage #:hp/env
  (:use #:cl)
  (:export #:dev-mode-p
           #:prod-mode-p
           #:*port*
           #:*address*))
(in-package #:hp/env)

(defmacro defenv (name env &key default parser)
  (let ((env-val (gensym "val")))
    `(defparameter ,name
       (let ((,env-val (uiop:getenv ,env)))
         (if ,env-val
             (funcall ,(or parser '#'identity) ,env-val)
             ,default)))))

(defenv *env* "HP_ENV" :default "dev")
(defenv *address* "HP_ADDRESS" :default "localhost")
(defenv *port* "HP_PORT" :default 3000 :parser #'parse-integer)

(defun dev-mode-p ()
  (string= *env* "dev"))

(defun prod-mode-p ()
  (string= *env* "prod"))