#!/bin/bash
set -e

shopt -s expand_aliases
alias gzip="gzip -n -9"

. /etc/os-release
export STACK_NAME="${STACK_NAME:?name is required}"
export STACK_VERSION="${STACK_VERSION:?version is required}"
export OS_NAME="${OS_NAME:-linux}"
export OS_ARCH=$(dpkg --print-architecture)
export OS_FLAVOUR="${OS_FLAVOUR:-${ID}-${VERSION_ID}}"
export TARNAME="${STACK_NAME}-${STACK_VERSION}-${OS_NAME}-${OS_ARCH}-${OS_FLAVOUR}"
export DATA_DIR=/workspace/"${TARNAME}"/data
export META_DIR=/workspace/"${TARNAME}"/meta
export PROFILE_DIR=/workspace/"${TARNAME}"/data/profile.d

_is_sourced() {
	# https://unix.stackexchange.com/a/215279
	[ "${#FUNCNAME[@]}" -ge 2 ] \
		&& [ "${FUNCNAME[0]}" = '_is_sourced' ] \
		&& [ "${FUNCNAME[1]}" = 'source' ]
}

function generate-stack-template() {
  mkdir -p "${META_DIR}"
  mkdir -p "${DATA_DIR}"
  mkdir -p "${PROFILE_DIR}"
  touch "${META_DIR}"/dependencies
  touch "${META_DIR}"/preinstall
  touch "${META_DIR}"/postinstall
  chmod +x "${META_DIR}"/preinstall "${META_DIR}"/postinstall
}

function generate-stack-package() {
  dist_dir="${1:? miss dist dir}"/"${STACK_NAME}"
  mkdir -p "${dist_dir}"
  tar --numeric-owner -czf "${dist_dir}"/${TARNAME}.tar.gz -C /workspace/"${TARNAME}" . --transform='s,^./,,'
  rm -rf /workspace/"${TARNAME}"
}

function generate-stack-path() {
  cat  << EOF > ${PROFILE_DIR}/${STACK_NAME}.sh
export PATH="/opt/drycc/${STACK_NAME}/bin:\$PATH"
EOF
}

function generate-stack-dependencies() {
  scanelp "${DATA_DIR}" | awk -F ":" '{print $1}' >> ${META_DIR}/dependencies
  sort ${META_DIR}/dependencies -u -o ${META_DIR}/dependencies
}

function source-stack-path() {
  . "${PROFILE_DIR}"/"${STACK_NAME}".sh
}

function build-stack() {
  generate-stack-template
  build || exit 1
  generate-stack-dependencies
  generate-stack-package "$1"
}


if ! _is_sourced; then
  action=$1
  shift 1
  $action "$@"
fi