#!/bin/bash

: ${PORT:="3666"}

npm run clean
npm run copy
npm prune
npm dedupe

DIST=".bin/public"
DOMAIN="http://ponyfoo.com"
ALL_CSS="$DIST/css/all.css"
CRITICAL_CSS=".bin/temp/critical.css"

# compile assets, routes
spritesmith
stylus client/css/all.styl -o $DIST/css --include-css --include client/css --compress
jadum views/**/*.jade -o .bin --no-debug --obj '{"basedir":"views"}'
taunus -o
browserify client/js/main.js --basedir client/js | uglifyjs -m -c > $DIST/js/all.js

# compile inlined scripts
uglifyjs .bin/inline/javascript.js -m -c -o .bin/inline/javascript.js
uglifyjs .bin/inline/styles.js -m -c -o .bin/inline/styles.js
uglifyjs .bin/inline/fonts.js -m -c -o .bin/inline/fonts.js

# critical css inlining. many slash, very escape.
LOGGING_LEVEL=info PORT=$PORT APP_REBUILD=0 node app &
APP_PID=$(procfinder --wait --port $PORT)
CRITICAL="$(phantomjs node_modules/penthouse/penthouse.js http://localhost:$PORT $ALL_CSS)"
CRITICAL_ESCAPED=$(echo $CRITICAL | sed -e 's/[\/#&]/\\&/g' -e 's/"/\\\\"/g')
LAYOUT=".bin/views/server/layout/layout.js"
echo "Gathered critical CSS, killing node app ($APP_PID)"
echo $CRITICAL > $CRITICAL_CSS
kill $APP_PID
sed -i -e "s#<style></style>#<style>$CRITICAL_ESCAPED</style>#" $LAYOUT
CSS_DIFF=$(cave $ALL_CSS --css $CRITICAL_CSS)
echo "$CSS_DIFF" > $ALL_CSS
cleancss $ALL_CSS -o $ALL_CSS --s0
rm $CRITICAL_CSS

# asset hashing
reaver $DIST/img/* --manifest | scourge .bin/{views,public/{css,js}} --base-path $DIST --domain $DOMAIN
reaver $DIST/{css,js}/* --manifest | scourge .bin/{inline,views/server} --base-path $DIST --domain $DOMAIN
