#!/usr/bin/env dash

soupault_conf="$(mktemp --suffix=.soupault.toml)"
h2o_conf="$(mktemp --suffix=.h2o.yml)"

cleanup() {
	echo -n "Cleaning up config files …"
	rm -f "$h2o_conf" "$soupault_conf"
	echo " done."
}

trap cleanup ABRT INT HUP TERM


# DEV SERVER SETTINGS #####################################################

DEV_SERVER_HOST="${DEV_SERVER_HOST:-"127.0.0.1"}"
export DEV_SERVER_HOST
DEV_SERVER_PORT="${DEV_SERVER_PORT:-"8866"}"
export DEV_SERVER_PORT
DEV_SERVER_ACCESS_LOG=''${DEV_SERVER_ACCESS_LOG:-"/dev/stdout"}
export DEV_SERVER_ACCESS_LOG
DEV_SERVER_ERROR_LOG=''${DEV_SERVER_ERROR_LOG:-"/dev/stderr"}
export DEV_SERVER_ERROR_LOG


# CONFIG SETUP ############################################################

nickel export --format toml --output "$soupault_conf" "./ncl/soupault.ncl"
SOUPAULT_BUILD_DIR=''${SOUPAULT_BUILD_DIR:-"$(nickel export --format text --field settings.build_dir "./ncl/soupault.ncl")"}
export SOUPAULT_BUILD_DIR


# ASSETS via TUP ##########################################################

tup build


# WEBSITE via SOUPAULT ####################################################

echo "Soupault Config: $soupault_conf"
soupault --build-dir "$SOUPAULT_BUILD_DIR" --config "$soupault_conf" || print_soupault_config


# HTTP / PROXY via H2O ####################################################

if [ "$(uname -s)" = "Linux" ]; then
	TLS_offload="kernel"
else
	TLS_offload="OFF"
fi

cat << EOF > "$h2o_conf"
access-log: '$DEV_SERVER_ACCESS_LOG'
error-log: '$DEV_SERVER_ERROR_LOG'
ssl-offload: $TLS_offload
http2-reprioritize-blocking-assets: ON
hosts:
   $DEV_SERVER_HOST:$DEV_SERVER_PORT:
      listen:
         host: $DEV_SERVER_HOST
         port: $DEV_SERVER_PORT
      paths:
         /:
            file.dir: '$SOUPAULT_BUILD_DIR'
EOF

echo "Listen: $DEV_SERVER_HOST:$DEV_SERVER_PORT"
echo "H2O Config: $h2o_conf"
h2o --mode=worker --conf="$h2o_conf"
