#!/usr/bin/env bash

set -o nounset
set -o pipefail

function clean {
  rm -fr output_*/ source/build/
}

function generate {
  local args=()

  if [[ "${APP_ENV:-}" == "production" ]]; then
    args=(--env="prod")
  else
    args=(--server --watch)
  fi

  sculpin generate "${args[@]}"
}

function help {
  printf "%s <task> [args]\n\nTasks:\n" "${0}"

  compgen -A function | grep -v "^_" | cat -n

  printf "\nExtended help:\n  Each task has comments for general usage\n"
}

function npm:build:css {
  local args=()

  if [[ "${NODE_ENV:-}" == "production" ]]; then
    args=(--minify)
  else
    args=(--watch)
  fi

  npx tailwindcss \
    --config assets/tailwind.config.ts \
    --output source/build/tailwind.css "${args[@]}"
}

function publish {
  export NODE_ENV=production
  export APP_ENV=production

  git stash

  clean
  npm:build:css
  generate

  rsync --archive --verbose --compress --update --delete \
    output_prod/ ssh.oliverdavies.uk:/srv/oliverdavies.uk-sculpin

  git stash pop
}

TIMEFORMAT="Task completed in %3lR"
time "${@:-help}"